Qt5绑定多宿主网络TCP套接字
Qt5 Bind TCP Socket on Multihomed Network
我在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。
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- C++ TCP 套接字 | 无法将"std::__cxx11::字符串"转换为"const
- ASIO 的 TCP 套接字::async_wait() 并在此之后关闭套接字
- Visual Studio(C++):如何使用TCP套接字发送多个值
- TCP套接字(客户端-服务器)recv()返回-1值
- C++中TCP套接字的recv函数
- 通过 TCP 套接字发送大型 base64 字符串
- 提升 ASIO TCP 套接字 1.70 不向后兼容
- 尝试连接到 TCP 套接字 (Linux) 时连接被拒绝
- 如何知道请求是否完全使用 TCP 套接字接收?
- Qt TCP 套接字 - 写入超过 15 个字节
- 同一提升 TCP 套接字对象上的多个连接
- 如何使用 recv 或 C++ 中的读取功能从 tcp 套接字读取大请求
- 如何<double>通过TCP套接字将CLI 列表^发送到本机C++?
- SOCAT,将TCP套接字转发到Unix套接字,将recvmsg()更改为read(),删除辅助数据
- 强制终止和重新生成 TCP 套接字应用程序时无法重用端口
- 通过 TCP 套接字发送结构 C++
- SIGPIPE C++确定哪个 TCP 套接字已断开连接
- 通过Qt-tcp套接字更改Qt-GUI
- C# 客户端到C++服务器 Tcp 套接字连接错误