检查数据是否已收到套接字c#

时间:2013-05-24 09:35:11

标签: c# sockets

在使用Socket.BeginSend()的套接字中发送异步数据时,这会将数据发送到连接的客户端或服务器,现在这样可以正常工作,但现在当我拔出网线并再次发送内容时,它不会放弃任何错误,

  • Socket.EndSend()不会抛出异常
  • Socketerror返回成功
  • socket.Connected为true

现在我知道,由于缓冲发生了sendCallback,因此无法保证数据已被发送,但我如何检查已经发送和接收的数据是否已发送和接收?

1 个答案:

答案 0 :(得分:2)

TCP / IP无法保证所有已发送的数据也将被接收。但即使它能保证它不是你所需要的。发送者实际需要的是知道它是否不必再次发送数据,这通常意味着发送的数据是否已经在接收方处理

如果发件人需要知道这一点,则必须更改通信协议 ,以便发件人可以接收接收方的确认,它可以安全地假设数据已被处理。此外,发件人必须在某一点宣布超时(并关闭套接字),如果收件人没有按时发回确认(并且在您的代码中必须决定该怎么办,可能保存以后发送的数据,或者向用户发出警报)。接收方必须处理相同数据被发送两次的情况(作为先前连接中的最后一项,以及新连接中的另一项),并且不将此数据视为两个不同的数据。 / p>

如果需要,我可以详细说明这些“必须”中的每一个。沟通很难。