我在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的localAddress。
任何人都可以了解正在发生的事情吗?我试图避免重写软件以扭转软件客户端/服务器的角色,因为这些程序非常大。谢谢你的帮助。