【问题标题】:Socket Send method does not throw an exception when remote host has closed the connection远程主机关闭连接时,Socket Send 方法不会抛出异常
【发布时间】:2011-07-11 21:42:05
【问题描述】:

我第一次使用 Socket.Send(byte[] data) 时它不会抛出异常,即使远程主机可能很久以前就关闭了连接。它只会在第二次尝试发送数据时抛出异常。

我进行了检查,该方法确实返回了正确的发送字节数。我还使用了带有 out SocketError 参数的重载。这包含调用后的 SocketError.Success。

为什么套接字在第一次调用时不抛出异常,而只在第二次调用时抛出异常。

【问题讨论】:

    标签: .net sockets


    【解决方案1】:

    当数据已发送到本地 TCP/IP 堆栈时,“发送”操作被视为完成。不保证数据已经到达远端。

    【讨论】:

    • 啊,是不是大多数通讯都内置了某种 ack 的原因?但我也记得 TCP/IP 有某种内置的 ack 机制。
    • TCP/IP 有一个数据包级别的确认,而不是消息级别的确认。 TCP/IP 的设计要求您每隔一段时间发送一次轮询或心跳消息。有关更完整的说明,请参阅 my blog
    • 谢谢 很久以前我研究了 TCP/IP 堆栈。 :)
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2018-11-13
    • 2016-04-11
    • 2015-03-29
    • 2011-08-27
    相关资源
    最近更新 更多