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

时间:2015-04-16 16:38:34

标签: c# asynchronous tcp server

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

我接收数据的客户端将发送8种不同的二进制"消息之一" (不是ASCII字符串)。这些字节数组的长度可以从6个字节到10KB不等。我的读缓冲区是1KB,因此我需要多次调用BeginReceive()来读取所有数据。客户端是否需要在数组开头附近嵌入字节数组的总长度,以便我确定所有数据都已被接收?

1 个答案:

答案 0 :(得分:4)

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