Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程TCP_C#_Multithreading_Sockets_Asynchronous_Tcp - Fatal编程技术网

C# 多线程TCP

C# 多线程TCP,c#,multithreading,sockets,asynchronous,tcp,C#,Multithreading,Sockets,Asynchronous,Tcp,伙计们,还有一件事 private void Form1_Load(object sender, EventArgs e) { sck.Connect("127.0.0.1", 8080); int s = sck.Send(Encoding.Default.GetBytes("A" + "~" + "B" + "~" + "C" + "~" + "D")); } 有没有办法将它们分别发送到服务器?并且还接收它们并将它们单独添加到l

伙计们,还有一件事

    private void Form1_Load(object sender, EventArgs e)
    {
        sck.Connect("127.0.0.1", 8080);   
        int s = sck.Send(Encoding.Default.GetBytes("A" + "~" + "B" + "~" + "C" + "~" + "D"));
    }
有没有办法将它们分别发送到服务器?并且还接收它们并将它们单独添加到listView中而不进行拆分? clientdata下面是void Load Form中的整个整数

    void client_Received(Client sender, byte[] data)
    {
        Invoke((MethodInvoker)delegate
        {
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                Client client = listView1.Items[i].Tag as Client;
                if (client.ID == sender.ID)
                {
                    clientdata = Encoding.Default.GetString(data); ;
                    string[] str = clientdata.Split('~');
                    listView1.Items[i].SubItems[2].Text = str[0];
                    listView1.Items[i].SubItems[3].Text = str[1];
                    listView1.Items[i].SubItems[4].Text = str[2];
                    listView1.Items[i].SubItems[5].Text = str[3];
                    break;
                }
            }
        });
    }

您做出了一个典型的错误假设,即套接字
Receive()
s正是您
Send()
。事实并非如此,这就是应用程序协议存在的原因

您必须决定分离参数和/或消息的方法,这将是您的应用程序协议。有多种方法可以做到这一点,最简单的方法是以一个整数开始每条消息,该整数指示以下消息的字节大小


服务器和客户端都必须理解该协议,以使它们能够有效地通信。一旦决定了消息格式,就为它创建一个解析器。然后,您可以让解析器返回您喜欢的任何对象,例如,包含您似乎愿意发送的四字节数组的对象

你能写一个发送和接收的例子吗?网络上到处都是这样的,例如,这使用了
NetworkStream
,而不是原始套接字,但想法是一样的。看见
void client_Received(Client sender, byte[] A, byte[] B, byte[] C, byte[] D)
{

}