在使用 Socket.BeginSend()
的套接字中发送异步数据时,这会将数据发送到连接的客户端或服务器,现在可以正常工作了,但是现在当我拔出网线并再次发送内容时,它不会给出任何错误,
Socket.EndSend()
不抛出异常 现在我知道,由于缓冲而发生 sendCallback 时,不能保证数据已经发送,但是我如何检查已经发送的数据是否已经发送和接收?
最佳答案
TCP/IP 不能保证所有已发送的数据也将被接收。但即使它可以保证这不是你所需要的。发送者真正需要的是知道它是否不必再次发送数据,这通常意味着发送的数据是否已经在接收者端进行了处理。
如果发件人需要知道这一点,那么通讯协议(protocol) 必须进行更改,以便发送方可以收到接收方的确认,表明它可以安全地假定数据已被处理。另外,发件人必须如果接收方没有按时发回确认(并且在您的代码中 必须 决定如何处理它,可能会保存要发送的数据,则在某些时候宣布超时(并关闭套接字)稍后,或向用户发出警报)。也是接收者必须处理相同数据被发送两次的情况(作为先前连接中的最后一项,作为新连接中的另一项),并且不将此数据视为两个不同的数据。
如果需要,我可以详细说明这些“必须”中的每一个。沟通很困难。
关于c# - 检查是否已收到数据套接字 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731849/