所以我正在编写一个应用程序,我需要将数据从客户端传输到我的服务器,并且我已经注意到NetworkStream.Read
函数的行为方式有一些非常奇怪的行为。我发送长度约为18个字节的数据包,如果我在服务器中进行while循环读取然后写入,那么我将正确地获取所有数据包。但是,如果我只读取并且从不写入,则在单个数据包之后读取不会返回。相反,它在返回之前收集了几个数据包,说它在每次迭代时收到了大约300多个字节。有人知道我为什么会这样做吗?我可以简单地回复' a'每一次,但这似乎有点贫民区。
以下是代码部分:
private static void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
int count = 0;
while (true)
{
bytesRead = 0;
try
{
// Block until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
// A socket error has occured
break;
}
if (bytesRead == 0)
{
// The client has disconnected from the server
break;
}
Debug.print("Number of bytes: {0:D}", bytesRead);
count++;
// Message has successfully been received. Echo back.
clientStream.Write(new byte[2], 0, 1);
}
Debug.print("Count: {0:F}", count);
tcpClient.Close();
}