[英]Multithreading 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"));
}
有沒有辦法將它們單獨發送到服務器? 並且還接收它們並將它們分別添加到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;
}
}
});
}
我想改變這個虛空之類的東西:
void client_Received(Client sender, byte[] A, byte[] B, byte[] C, byte[] D)
{
}
你做出經典的錯誤假設,即套接字Receive()
正是你Send()
那個Send()
。 事實並非如此,這就是應用程序協議存在的原因。
您將不得不決定分離參數和/或消息的方法,這將是您的應用程序協議。 有多種方法可以做到這一點,最簡單的方法是使用一個整數來啟動每條消息,該整數表示以下消息的大小(以字節為單位)。
服務器和客戶端都必須理解該協議,以使它們有效地進行通信。 一旦確定了消息格式,就為它創建一個解析器。 然后你可以讓你的解析器返回你喜歡的任何對象,例如包含你似乎願意發送的四個字節數組的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.