【发布时间】:2013-04-22 10:23:06
【问题描述】:
我在使用 Qt5 中 QTcpSocket 类的新绑定功能时遇到了麻烦。任何解决此问题的帮助将不胜感激。
我有一个多宿主服务器,其中包含两个 NIC,每个 NIC 都有一个单独的 IP 地址。我已经在服务器上设置了路由,以便从源地址发送来自适当的 NIC,而不管目标远程地址如何。也就是说,无论数据发送给谁,从 x.x.x.0 发送到 eth0 并且 x.x.x.1 通过 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,这不是我想要的。
任何人都可以了解正在发生的事情吗?我试图避免重写软件来颠倒软件客户端/服务器的角色,因为这些程序非常大。感谢您的帮助。
【问题讨论】:
标签: c++ qt tcp qt5 multihomed