QTcpSocket 异步编程 外网测试连不上问题解决方法

最近在测试软件功能时,内网测试都没有问题,使用外网测试,节点端使用的时物联网卡,做了公网映射,但是外网客户端始终无法连接到服务端。做了如下尝试:

1.关闭防火墙(没有成功)
2.设置服务端的入站规则,好像关闭防火墙后这一步也不用设置(没有成功)

测试过程中发现,只能第一次连接,一旦掉线就再也连不上。

但是在connectToHost()后面加上waitForConnected()即可连上。但是此函数会发生阻塞,由于我的线程中有ui,会导致界面卡顿,所以此方法不适应。后来想了下为什么阻塞的可以呢?难道是因为在使用waitForConnected()返回之前这段时间不会再对套接字进行任何的操作打断这个连接的过程,因为我的代码会定时发送心跳包,并没有检测套接字是否连接成功,所以就做了一个尝试,在发送数据之前检测是否已经连接上,即tcp->state()==3的时候才会发送数据,5秒检测一次是否连接,发现成功,中间就算掉线了也能重新连上。

所以初步得到外网测试连不上的解决方法为:
1.如果线程不涉及ui,使用connectToHost(),如果自行设置时长建议至少1秒。
2.如果线程中涉及ui,请确保使connectToHost()连接上之前,不要对QTcpSocket套接字做任何操作,如果发送数据请先确定套接字存在且连接状态tcp->state()==3

本人实验结果,不一定适应于所有人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值