1. 程式人生 > 其它 >Qt 無線區域網內 TCP 客戶端連線失敗

Qt 無線區域網內 TCP 客戶端連線失敗

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 失敗問題