客户端使用 ssh 登录并在远程计算机上启动服务器,然后 clinet 创建到服务器的 tcp 连接。当客户端正常退出或崩溃或网络掉线时,服务器需要退出。那么问题是如何检测服务器所连接的客户端是否崩溃了。
第一次尝试是使用 error() 信号,捕获 QAbsoluteSocket::NetworkError 以确定网络已断开。但即使拔掉网线我也根本收不到error()信号。
第二次尝试是使用SocketState,我认为每当SocketState为UnconnectedState时,客户端可能已经正常退出,服务器也应该退出。这种方式对于“正常退出”来说效果很好,但我不知道如何处理“崩溃”和“死网络”。
帮帮我,谢谢!
我建议使用TCP keep alive。它不是通过公共QTcpSocket接口公开的,但您可以将setsockopt与QAbstractSocker::socketDescriptor一起使用来激活SO_KEEPALIVE功能。
编辑:似乎在某个时刻将保持活动状态添加到了 QAbstractSocket 中。因此,只需使用QAbstractSocket::KeepAliveOption调用QAbstractSocket:: setSocketOption即可。
您可以在此处找到有关调整保持活动请求超时的信息:http://www.gnugk.org/keepalive.html
| 归档时间: |
|
| 查看次数: |
4110 次 |
| 最近记录: |