簡體   English   中英

Qt5在多宿主網絡上綁定TCP套接字

[英]Qt5 Bind TCP Socket on Multihomed Network

我在使用Qt5中的QTcpSocket類的新綁定功能時遇到麻煩。 任何幫助弄清楚這一點將不勝感激。

我有一台多宿主服務器,其中包含兩個網卡,每個網卡都有一個單獨的IP地址。 我在服務器上設置了路由,以便從源地址發送的數據都從適當的NIC發送出去,而不管目標遠程地址如何。 也就是說,無論將數據發送給誰,從xxx0發送的數據都將通過eth0發出,而xxx1將通過eth1的數據發出。 這些NIC通過以太網連接到遠程Wifi鏈接,然后將其連接到交換機。 這些wifi鏈接充當透明的網橋,可以看作兩條以太網電纜(但它們的帶寬有限)。 然后將交換機連接到計算機。 目標是在服務器和計算機之間傳輸數據,並並行使用兩個wifi鏈接以增加帶寬。 盡管服務器實際上是一台服務器,但是該軟件具有作為軟件服務器運行的計算機(其他計算機已連接到該服務器)。 即,物理服務器(軟件客戶端)打開TCP套接字並嘗試連接到偵聽計算機(軟件服務器)。

我使用Qt5的綁定功能將一個TCP套接字綁定到eth0 IP地址,並將另一個TCP套接字綁定到eth1 IP地址。 我已經驗證了它可以與其他程序(例如PING或通過SCP傳輸文件)一起使用。 參見http://qt-project.org/doc/qt-5.0/qtnetwork/qabstractsocket.html#bind

當我進行綁定時,調用成功,隨后對本地IP地址的請求返回正確的值。 例如,socket-> bind(ip)返回true,然后socket-> localAddress()等於ip。 但是,當我調用connectToHost時,它在開始連接嘗試時會丟失localAddress,並且在連接后它具有另一個不是我希望它擁有的localAddress。

任何人都可以了解正在發生的事情嗎? 我試圖避免重寫軟件來扭轉軟件客戶端/服務器的角色,因為這些程序很大。 謝謝您的幫助。

Qt項目錯誤跟蹤器中有一個未解決的錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM