如何使用Tcp NetworkStream C#发送和接收List

时间:2017-02-17 12:31:41

标签: c# winforms sockets tcp

我刚刚开始学习套接字编程,现在我正在尝试发送List<>从客户端到服务器。

我已经读过我需要使用BinaryFormatter进行序列化和反序列化,但我只是不知道如何使用NetworkStream将其发送到服务器。

请帮助,非常感谢任何解释。非常感谢你的进步。

以下是我的客户端代码

layeredPane.add(token[0], 1);

以下是我的服务器代码

private void btnSendDataToServer_Click(object sender, EventArgs e)
    {
        int noOfMessage = Convert.ToInt32(tbMessageNo.Text);
        try
        {
            serverStream = clientSocket.GetStream();
            for (int i = 0; i < noOfMessage; i++)
            {
                clientList.Add(tbSendDataToServer.Text);
            }

            //send data to server
            byte[] outStream = System.Text.Encoding.ASCII.GetBytes(?); 
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();

            //receive data from server
            byte[] inStream = new byte[102400]; 
            serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
            string returndata = System.Text.Encoding.ASCII.GetString(inStream); 
            msg("Data from Server : " + returndata);
        }
        catch(SocketException ex)
        { }
    }

P.S。如果它是单个字符串,我没有问题。但我想根据用户noOfMessage循环字符串1st并将其放在List中。然后我将列表发送到服务器。然后,服务器将读取收到的List并显示List的数据。谢谢。

1 个答案:

答案 0 :(得分:2)

发送数据

BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(serverStream, clientList);
serverStream.Close();

在服务器上接收

BinaryFormatter formatter = new BinaryFormatter();
clientList = (List<string>) formatter.Deserialize(networkStream);