在C#soket编程中遇到问题 [英] having problem in C# soket programming

查看:156
本文介绍了在C#soket编程中遇到问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace sokect_ex_client
{
    public partial class Client : Form
    {
        
        UdpClient client;
        IPEndPoint portnum;
        public Client()
        {
            InitializeComponent();
            portnum = new IPEndPoint(new IPAddress(0), 0);
            client = new UdpClient(9000);
            Thread thread = new Thread(new ThreadStart(sendquestion));
            thread.Start();
        }
        public void sendquestion()
        {
            while (true)
            {
                string pak;
                byte[] data; 
                data = client.Receive(ref portnum);

                listBox1.Items.Add(System.Text.Encoding.ASCII.GetString(data) + "recived ack send ");
                //IPEndPoint ip_end = new IPEndPoint(, 80);
                pak = question_add.Text;
                data = System.Text.Encoding.ASCII.GetBytes(pak);
                client.Send(data, data.Length, portnum);
                listBox1.Items.Add(System.Text.Encoding.ASCII.GetString(data) + "sended");
                data = client.Receive(ref portnum);
                listBox1.Items.Add(System.Text.Encoding.ASCII.GetString(data) + "recived");
                //http get :


            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string pak = "connect";
            byte[] data = System.Text.Encoding.ASCII.GetBytes(pak); 
            client.Connect("localhost", 8000);
            client.Send(data, data.Length, portnum);
        }
    }
}
---------------------- 


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace soket_example
{
    public partial class Server : Form
    {
        UdpClient client;
        IPEndPoint portnum;
        public Server()
        {
            InitializeComponent();
            client = new UdpClient(8000);
            portnum = new IPEndPoint(new IPAddress(0),0);
            Thread readt = new Thread(new ThreadStart(wait));
            readt.Start();
        }
        public void wait()
        {
            while (true)
            {
                byte[] data = client.Receive(ref portnum);
                client_txt.Items.Add(System.Text.Encoding.ASCII.GetString(data));
                string send_ok = "ok";
                data = System.Text.Encoding.ASCII.GetBytes(send_ok);
                client.Send(data, data.Length , portnum);
                client_txt.Items.Add("accepted connect ");
                data =  client.Receive(ref portnum);
                client_txt.Items.Add(System.Text.Encoding.ASCII.GetString(data));
                StreamReader readf = new StreamReader("F:\address.txt");
                string info;
                info = readf.ReadLine();
                string[] info1 = new string[4];
                //for (int i = 0; i < 4; i++)

                info1 = info.Split(',');
              
                if (info1[0] == client_txt.Text )
                {
                    data = System.Text.Encoding.ASCII.GetBytes(info1[1] + "," + info1[2]);
                    client.Send(data, data.Length, portnum);
                    client_txt.Items.Add("sending File address ...."); 
                }
                else
                {
                    int[] inf = new int[6];
                    for (int i = 0; i < 6; i++)
                    {
                        inf[i] = 0;
                    }
                    data = System.Text.Encoding.ASCII.GetBytes(inf.ToString());
                    client.Send(data, data.Length, portnum);
                    client_txt.Items.Add("sending File address .... : file address not found !!! "); 
                }
               // break; 
            }
           // client.Close();
        }

        private void Server_Load(object sender, EventArgs e)
        {

        }
    }
}




客户端中的问题:button1_单击

client.Send(data,data.Length,portnum); :::连接后无法将数据包发送到任意主机.无效的操作异常

[edit]已添加代码块,将我的内容作为纯文本格式..."选项已禁用-OriginalGriff [/edit]




problem in client : button1_ click

client.Send(data, data.Length, portnum); ::: Cannot send packets to an arbitrary host while connected. invalid operation exception

[edit]Code block added, "Treat my content as plain text..." option disabled - OriginalGriff[/edit]

推荐答案

我没有使用过UdpClient但是错误消息似乎很明确:如果您已连接",则不应使用带有端口号的Send版本(必须是UdpClient中的软件层概念).尝试改用client.Send(data,data.Length).
I''ve not used UdpClient but the error message seems clear: you shouldn''t be using the version of Send which takes a port number if you have ''connected'' (must be a software layer concept in the UdpClient). Try using client.Send(data, data.Length) instead.


这篇关于在C#soket编程中遇到问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆