已知何时关闭网络流
本文关键字:网络 何时关 | 更新日期: 2023-09-27 17:56:13
我正在编写tcp服务器和客户端应用程序。服务器如何知道何时与客户端的连接不可用,例如客户端计算机突然崩溃并且没有发送 FIN 标志?
当我尝试写入网络流时,它会给我抛出一个异常,我想知道如何在不读取/写入流或其他方式的情况下捕获此异常,以了解流是否已关闭。
有什么帮助吗?
你不能,没有办法在不捕获异常的情况下检查连接是否关闭。
尝试在客户端上写入/读取将引发异常,这意味着连接已关闭。
TCP 具有保持活动间隔,其中保持活动探测数据包用于检查另一方是否仍处于活动状态。您需要检查SO_KEEPALIVE套接字选项以获取更多信息。另一个更好的选择是让探测数据包定期在应用层发送。您可以将服务器端的 TCP 接收超时设置为某个标称值,例如 1 分钟。从客户端,您可以每分钟发送一次虚拟请求。如果在此时间内未收到请求,服务器 recv 将超时,并假定客户端连接丢失。