TCP套接字服务器如何判断从客户端接收到的数据何时完成?

TCP socket server how to tell when data received from client is complete?

我正在使用我在 MSDN 上找到的一些异步 TCP 套接字服务器代码,但我不清楚如何检测我是否已收到客户端应该发送的所有数据。在 MSDN 示例中,他们发送 ASCII 字符串(当然,已转换为字节),并且在每次读取套接字后,他们检查解码的字符串是否包含 EOF 标记。如果没有,代码将再次调用 BeginReceive() 以检索更多数据。

我从中接收数据的客户端将发送 8 个不同的二进制文件之一 "messages"(不是 ASCII 字符串)。这些字节数组的长度从 6 个字节到 ~10KB 不等。我的读取缓冲区是 1KB,因此我很有可能需要多次调用 BeginReceive() 才能读取所有数据。客户端是否需要将字节数组的总长度嵌入数组开头附近的某个位置,以便我确定所有数据已全部接收?

如果您正在设计此二进制协议,则由您决定如何标记和确定消息结尾。在消息的开头嵌入长度是执行此操作的常用方法。如果其他人设计了协议,请询问他们如何标记和确定消息的结尾。这是一个协议设计决定。