Qt5绑定多宿主网络TCP套接字

Qt5 Bind TCP Socket on Multihomed Network

本文关键字:TCP 套接字 网络 宿主 绑定 Qt5      更新时间:2023-10-16

我在Qt5中使用QTcpSocket类的新绑定功能时遇到麻烦。如果你能帮我解决这个问题,我将不胜感激。

我有一个多主服务器,它包含两个网卡,每个网卡都有一个单独的IP地址。我在服务器上设置了路由,这样无论目标远程地址是什么,从源地址发送的消息都会从适当的NIC发送出去。也就是说,无论数据发送给谁,从x.x.x.0发出的信息都将通过eth0发出,而从x.x.x.1发出的信息将通过eth1发出。这些网卡通过以太网连接到远程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,而不是我希望它具有的localAddress。

有谁能解释一下发生了什么事吗?我试图避免重写软件,以扭转软件客户端/服务器的角色,因为这些程序相当大。谢谢你的帮助。

Qt项目的bug跟踪器中有一个公开的bug。