标题:请教关于QTCPServer和QTcpSocket的问题
作者:clickto
日期:2021-01-10 16:39
内容:
我一个简单的应用,就一个QTcpServer和一个QTcpSocket进行通信,很简单很常规的流程。
现在出现这样一个问题,即客户端连接上服务器后,是可以正常发送数据给服务器的,可以接受服务器返回的数据。
但是,如果我几分钟(5分钟)不给服务器传数据,之后不管客户端在怎么发送数据,服务器总是接收不到。。。
但是如果隔一段时间发一次数据(小于5分钟),是可以的一直通信的。
通信中断后,主动断开客户端,服务器也接收不到相应的消息,查看服务器的socket状态,一切正常。
而且客户端重启连接的话,仍然可以连接,收发数据。但是一旦再过几分钟,就又挂了。。
请教一下这是怎么回事,如何解决?
服务器是一个控制台应用,跟这个有关系么?
#1 [20091001753 01-10 19:34]
你自己要设计一个心跳规则
比如每隔几秒,向服务端发送一个数据,并且服务端也返回一个数据。
这样有2个好处,首先是使得连接保持活跃的状态,然后是可以测试出耗时。
例如规则可以是:你向服务器发送一个时间x,服务器再返回x
那么你就用收到服务器返回的时间减去x,就是通讯的耗时。
另外,如果在x发出1秒后,还没有收到服务器返回的x,那么就可能断了,或是网络非常糟糕。
#2 [clickto 01-10 20:56]
谢谢版主回答。不过,我只能采用心跳保活么?我之前多次使用QTcpSocket和QTcpServer,都是长连接,都没出现这种问题。
#3 [20091001753 01-11 23:33]
客户端与服务端通信,中间会经过非常多的关网,如果你不采用心跳保持稳定的通讯,遇到一些规则严格的网关,就会掐断。
#4 [clickto 01-12 19:14]
好的,那我加入心跳机制吧。
再次感谢版主大大!!!
#5 回 20091001753 的帖子 [海森堡 01-12 21:26]
20091001753:你自己要设计一个心跳规则
比如每隔几秒,向服务端发送一个数据,并且服务端也返回一个数据。
这样有2个好处,首先是使得连接保持活跃的状态,然后是可以测试出耗时。
....... (2021-01-10 19:34)
请问这个过程中,是QTcpServer产生了timeout无法发送信息,还是QTcpServer产生了timeout无法接收信息呢?它们的默认timeout分别是多少呢?我在文档上找到的信息,都是关于connect的timeout,没有说一段时间不用以后,多久会断开。