关于Qt tcpsocket的掉线解决方法

1 tcpip协议

没什么好说的,号称保证传输准确可靠,使命必达。协议很大一坨,实际应用上用得上的很少。

2 问题所在

在使用tcp协议跟服务器连接后(分别测试过windows系统,ubuntu系统 单片机带tcpip协议的通讯模块)都发现不能及时反馈或反馈 网络已断;(在同一个局域网内和公共网络上都一样,起初怀疑会不会ubuntu系统的网卡驱动有问题,后来发现windows系统也一样,用的是wifi联网)。最后只能说会不会是路由不是实时的。

3 解决方法

根据qt的说明文档是试错,各种方法都用过;反正你把网线拔了,Qt 的tcpsocket类依然是没有发现网络已断,发送依然是正常的。(本以为qt的这个类会比通用的tcp ip类会好点,一个鸟样,至于keepalive的选项,statechange也不可用,会不会很多tcp服务器也要使用keepalive的选项才能使用有效果,以后有时间试一下);现在解决方法有两个: 1)使用心跳包方式;每秒发送一次服务器应答一次;很耗CPU资源;2)(推荐)在自己的发送函数上socket_send(qbytedata msg)检测qtcpsocket state的状态,假如状态不是connnected,就重新连接;因为在路由上接上目标ip的服务器后,这边statechange才会生效(拔线或掉线不会生效)。

猜你喜欢

转载自blog.csdn.net/jb_mai/article/details/124986953
今日推荐