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)
{
}