当我从客户端向服务器发送许多消息时,我会收到第一个数据包中第二个数据包的一半。
例如,我发送
JOHN 1000
MARK 2000
我收到JOHN 1000 MARK
2000
这是我的读者:
private void ReceiveData()
{
int numberOfBytesRead = 0;
while (isConnected && _stream.CanRead)
{
try
{
numberOfBytesRead = _stream.Read(_buffer, 0, _buffer.Length);
receiveMsg = Encoding.ASCII.GetString(_buffer, 0, numberOfBytesRead);
_stream.Flush();
if(receiveMsg == "")
return ;
Debug.Log("[Recv] " + receiveMsg);
receiveMsg = "";
}
catch (Exception e)
{
CloseConnection();
Debug.Log(e.ToString());
}
}
}
答案 0 :(得分:0)
TCP连接是字节流。当您将一条消息(作为字节数组)写入流,然后将另一条消息写入另一条消息时,接收方无法知道一条消息的结束位置以及下一条消息的开始位置。
您需要为客户端添加一些方法来了解它何时收到完整的消息 - 一种常见的方法是选择一个字节,并使用它来表示消息的结尾(分隔符)。 C#有StreamReader
和StreamWriter
,可用于此目的。致电ReadLine()
或WriteLine()
,邮件末尾将标有换行符。