2013-04-09 58 views
1

我在使用Qt5中的QTcpSocket类的新绑定功能时遇到了麻烦。任何帮助搞清楚这一点将不胜感激。Qt5绑定多宿主网络上的TCP套接字

我有一个多宿主服务器,其中包含两个网卡,每个网卡都有一个单独的IP地址。我在服务器上设置了路由,以便从源地址发送出适当的NIC,而不管目标远程地址如何。也就是说,从x.x.x.0发送通过eth0发送出去,x.x.x.1通过eth1发送出去,而不管数据发送给谁。这些网卡通过以太网连接到长距离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,它不是我想要的那个。

任何人都可以阐明发生了什么?我试图避免重写软件来扭转软件客户端/服务器的角色,因为这些程序相当大。谢谢您的帮助。

回答