1

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

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

现在我知道,由于缓冲而发生 sendCallback 时,不能保证数据已经发送,但是我如何检查已经发送的数据是否已经发送和接收?

4

1 回答 1

3

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

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

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

于 2013-05-24T10:10:38.543 回答