C#如何使用TCPClient发送多个字节流?

时间:2012-08-16 14:56:23

标签: c# tcpclient networkstream

我正在尝试使用TCP客户端进行登录功能。我有两种形式:客户端和服务器端。

客户端在服务器端连接数据库时处理用户输入。

问题在于读者结果,它总是将两个输入组合成一个长字符串,如下所示:

   myusernamemypassword

以下是客户端发件人的一部分:

    byte[] byteUsername = Encoding.Unicode.GetBytes(username);
    byte[] bytePassword = Encoding.Unicode.GetBytes(password);

    NetworkStream stream = client.GetStream();

    stream.Write(username, 0, byteUsername.Length);
    stream.Write(password, 0, bytePassword.Length); 
        //if offset != 0, the code always return ArgumentOutOfRangeException

服务器端的读者

    return Encoding.Unicode.GetString(buffer, 0, buffer.Length)

经过长时间搜索,我找到了解决方案,但它只能处理两个字符串;第三个+字符串将与第二个字符串组合在一起。我需要为其他功能发送至少4个字符串。

以下是更新的阅读器代码:

List<string> list = new List<string>();
int totalRead = 0;
do
{
    int read = client.GetStream().Read(buffer, totalRead, buffer.Length - totalRead);

    totalRead += read;

    list.Add(Encoding.Unicode.GetString(buffer, 0, totalRead));

} while (client.GetStream().DataAvailable);

我不太明白这段代码。怎么知道哪个字节是第一个字符串的一部分? size Read()参数length-totalReadlength - 0 {{1}},它应该返回整个缓冲区吗?

任何解决方案的人?

之前谢谢

1 个答案:

答案 0 :(得分:3)

您应该为每个字符串添加长度(以字节为单位,而不是字符)作为4字节整数 这样,服务器就会知道要读入每个字符串的字节数。