1

伙计们,这是另一回事。

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

}
4

1 回答 1

3

你做了一个经典的错误假设,即套接字Receive()正是你的Send()。这不是真的,这就是存在应用程序协议的原因。

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

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

于 2013-09-26T15:10:26.027 回答