在使用Socket.BeginSend()
的套接字中发送异步数据时,这会将数据发送到连接的客户端或服务器,现在这样可以正常工作,但现在当我拔出网线并再次发送内容时,它不会放弃任何错误,
Socket.EndSend()
不会抛出异常现在我知道,由于缓冲发生了sendCallback,因此无法保证数据已被发送,但我如何检查已经发送和接收的数据是否已发送和接收?
答案 0 :(得分:2)
TCP / IP无法保证所有已发送的数据也将被接收。但即使它能保证它不是你所需要的。发送者实际需要的是知道它是否不必再次发送数据,这通常意味着发送的数据是否已经在接收方处理。
如果发件人需要知道这一点,则必须更改通信协议 ,以便发件人可以接收接收方的确认,它可以安全地假设数据已被处理。此外,发件人必须在某一点宣布超时(并关闭套接字),如果收件人没有按时发回确认(并且在您的代码中必须决定该怎么办,可能保存以后发送的数据,或者向用户发出警报)。接收方必须处理相同数据被发送两次的情况(作为先前连接中的最后一项,以及新连接中的另一项),并且不将此数据视为两个不同的数据。 / p>
如果需要,我可以详细说明这些“必须”中的每一个。沟通很难。