最近在测试软件功能时,内网测试都没有问题,使用外网测试,节点端使用的时物联网卡,做了公网映射,但是外网客户端始终无法连接到服务端。做了如下尝试:
1.关闭防火墙(没有成功)
2.设置服务端的入站规则,好像关闭防火墙后这一步也不用设置(没有成功)
测试过程中发现,只能第一次连接,一旦掉线就再也连不上。
但是在connectToHost()后面加上waitForConnected()即可连上。但是此函数会发生阻塞,由于我的线程中有ui,会导致界面卡顿,所以此方法不适应。后来想了下为什么阻塞的可以呢?难道是因为在使用waitForConnected()返回之前这段时间不会再对套接字进行任何的操作打断这个连接的过程,因为我的代码会定时发送心跳包,并没有检测套接字是否连接成功,所以就做了一个尝试,在发送数据之前检测是否已经连接上,即tcp->state()==3的时候才会发送数据,5秒检测一次是否连接,发现成功,中间就算掉线了也能重新连上。
所以初步得到外网测试连不上的解决方法为:
1.如果线程不涉及ui,使用connectToHost(),如果自行设置时长建议至少1秒。
2.如果线程中涉及ui,请确保使connectToHost()连接上之前,不要对QTcpSocket套接字做任何操作,如果发送数据请先确定套接字存在且连接状态tcp->state()==3
本人实验结果,不一定适应于所有人。
QTcpSocket 异步编程 外网测试连不上问题解决方法
最新推荐文章于 2023-05-30 09:06:20 发布