bmt*_*033 4 c# asynchronous tcp server
我正在使用我在 MSDN 上找到的一些异步 TCP 套接字服务器代码,但我不清楚如何检测我是否已收到客户端应该发送的所有数据。在 MSDN 示例中,它们发送 ASCII 字符串(当然,转换为字节),并且在每次读取套接字后,它们检查解码后的字符串是否包含 EOF 标记。如果没有,代码会再次调用 BeginReceive() 以检索更多数据。
我从中接收数据的客户端将发送 8 个不同的二进制“消息”之一(不是 ASCII 字符串)。这些字节数组的长度可以从 6 字节到 ~10KB 不等。我的读取缓冲区为 1KB,因此我很可能需要多次调用 BeginReceive() 才能读取所有数据。客户端是否需要将字节数组的总长度嵌入到数组开头附近的某个位置,以便我确定所有数据均已收到?
如果您正在设计此二进制协议,则由您决定如何标记和确定消息结尾。将长度嵌入消息的开头是执行此操作的常见方法。如果其他人设计了该协议,请询问他们如何标记和确定消息结尾。这是一个协议设计决策。