我在使用 Qt5 中 QTcpSocket 类的新绑定功能时遇到了麻烦。任何解决此问题的帮助将不胜感激。
我有一个多宿主服务器,其中包含两个 NIC,每个 NIC 都有一个单独的 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
当我调用 bind 时,调用成功并且对本地 IP 地址的后续请求返回正确的值。例如socket->bind(ip) 返回true,然后socket->localAddress() 等于ip。但是,当我调用 connectToHost 时,localAddress 在开始连接尝试时会丢失,并且在连接后它有一个不同的 localAddress,这不是我想要的。
任何人都可以阐明正在发生的事情吗?我试图避免重写软件来颠倒软件客户端/服务器的角色,因为这些程序非常大。谢谢您的帮助。