2014-10-09 27 views
0

我想使用特定的源接口連接到遠程主機。我有 3接口:爲eth0(192.168.230.100),爲wlan0(10.0.9.100)和LO:QTcpSocket:選擇使用bind()連接到具有connectToHost()的遠程主機的源接口:需要解決方法

假設mSocket是類成員:

QTcpSocket mSocket; 

而且在構造函數中,我們使用:

bool ret = mSocket.bind(QHostAddress("10.0.9.100")); 

然後在定時器我們嘗試連接:

void CamComponent::tryToConnect() 
{  
    mSocket.connectToHost(QHostAddress(CameraIpAddr), CameraPort); 
} 

並在此之後我用TCPDUMPŧ o查看傳出數據包,並且它們沒有源IP 10.0.9.100。使用strace的我已經檢查了Qt的讓到呼叫:

  • 插座()
  • bind()的
  • 插座()< - 這將導致問題,這是QT內部 問題
  • 連接()

什麼是解決此問題的方法?

回答

1

這個問題不是Qt相關的。您只需瞭解TCP/IP堆棧如何工作。

當您嘗試連接到遠程服務器時,請提供其IP地址。在內部,您的操作系統將根據其路由表選擇一個適當的出接口來發送這些連接數據包。 (我不會在這裏談論衝突和默認路由,Google應該足以讓你的文化)

所以,你只需要使用你的QTcpSocket作爲客戶端套接字,connectToHost並讓解析魔術發生。套接字綁定僅在服務器應用程序中有意義。

相關問題