簡體   English   中英

多線程TCP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM