我的服务器将使用networkStream.Write(messageBytes)发送消息;
我的客户端将使用 networkStream.Read() 接收消息。客户端将逐字节读取序列,当它找到序列时,它会读取标头的其余部分。
标头包含有效负载长度。一旦我有了这个,我就使用有效载荷长度读取流来获取有效载荷。
我的问题是,当我写入数据时,我的客户端将尝试立即读取,此时可能尚未写入所有数据。
所以我最终得到了一条消息,结尾被有效地切断了:
"嘭
�有没有等待收到所有信息?
谢谢。
这真的没有意义。套接字读取函数告诉您有多少数据可用/已读入缓冲区,因此,如果您正在缓冲区中处理一堆 NULL,因为尚未收到其余数据,那么您没有检查已接收了多少数据。如果您期望获得更多数据,请继续接收,直到获得尽可能多的数据(通过将指针推进到接收缓冲区或复制到新缓冲区等来避免覆盖以前收到的块)。
系统网络缓冲区不是无限的,如果您不从Windows套接字读取它们到内部存储器,它们将停止接收。
在这种情况下,您可能希望为数据创建内存存储:
byte[] data = new byte[dataLength];
并继续将数据推送到数组中,直到全部读取。