1. 实验来源
《Qt Creator快速入门 第三版》第18章 18.4 TCP 实验,tcpserver 和 tcpclient。
2. 实验配置
两台主机 PC1 和 PC2 接入同一无线路由器。
PC1 和 PC2 均开了代理。
3. 测试
3.1 两台主机之间使用 TCP 调试助手进行连接测试
PC1 和 PC2 分别使用 TCP 调试助手作为 server 和 client 进行连接,一切正常。
3.2 server 与 TCP 调试助手进行连接测试
PC1 或 PC2 下,Qt server 与 TCP 调试助手可以连接,也就是在本地可以连接。
PC1 下 Qt server 与 PC2 下 TCP 调试助手可以连接,互换位置一样可以连接。
3.3 client 与 TCP 调试助手进行连接测试
PC1 或 PC2 下,Qt client 与 TCP 调试助手可以连接;也就是在本地可以连接。
PC1 下 Qt client 与 PC2 下 TCP 调试助手无法连接,互换位置同样无法连接。
4. 问题讨论
为什么 client 无法进行连接,而 TCP 调试助手却可以?
因为 TCP 调试助手可以连接,最开始就排除了 PC 的问题而将目标锁定在 client 代码上,但代码很简单根本看不出问题。
最后还得感谢网友的记录(详见文末参考链接),将问题指向代理上。
关闭了 PC1 和 PC2 上的代理,Qt client 可以正常连接 TCP 调试助手和 Qt server。
Qt 官方文档上关于代理类型的说明:
在不关闭代理的情况下进行如下设置也可以使 Qt client 进行正常连接。
// 将代理类型改为 NoProxy
tcpSocket->setProxy(QNetworkProxy::NoProxy);
参考链接:记录 QTcpSocket 碰到的 ConnectToHost 失败问题