我正在尝试更好地处理异步使用套接字。根据这篇文章http://msdn.microsoft.com/en-us/library/bew39x2a(v=VS.85).aspx,我应该能够检查EndReceive返回的字节数,如果它是零,我知道我拥有所有数据,如果它不为零,那么可能会或者可能没有更多的数据来了。这是有道理的,但是当我最后一次调用BeginReceive时,通常在调用回调函数前几分钟......我假设某些东西必须超时,但更改Socket.ReceiveTimeout属性似乎没有效果
这是否真的是用于确定我何时收到所有数据的正确模式?特别是当我不知道我收到的消息的格式时?
答案 0 :(得分:3)
这取决于“所有数据”的含义。另一端关闭了插座吗?如果没有,您还没有真正读取所有数据,因为服务器可以随时发送更多数据。
如果另一端已经关闭了套接字,那么回调应该会很快发生。
答案 1 :(得分:0)
由于TCP是面向流的协议,因此有3种通用方法可以知道消息何时被完全接收: