【问题标题】:Knowning when a NetworkStream is closed知道网络流何时关闭
【发布时间】:2015-08-31 03:25:03
【问题描述】:

我正在编写 tcp 服务器和客户端应用程序。服务器如何知道与客户端的连接何时不可用,例如客户端的计算机突然崩溃并且没有发送 FIN 标志?

当我尝试写入网络流时,它会抛出一个异常,我想知道如何在不读取/写入流或其他方式知道流是否关闭的情况下捕获此异常。

有什么帮助吗?

【问题讨论】:

  • 不可能。在读/写时捕获异常是要走的路。

标签: c# tcp network-programming tcpclient tcplistener


【解决方案1】:

你不能,没有办法检查连接是否关闭而不捕获异常。

尝试在客户端写入/读取将引发异常,这意味着连接已关闭。

【讨论】:

  • “将抛出”不一定。一开始它可能什么都不做。
【解决方案2】:

TCP 有保活间隔,保活探测包用于检查对方是否还活着。您需要检查 SO_KEEPALIVE 套接字选项以获取更多信息。 另一个更好的选择是定期在应用层发送探测包。您可以将服务器端的 TCP 接收超时设置为某个标称值,例如 1 分钟。从客户端,您可以每分钟发送一次虚拟请求。如果在这段时间内没有收到请求,服务器recv将超时并假定客户端连接丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2019-03-29
    • 2015-06-24
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多