QTcpSocket 无法绑定到正确的 IP

Posted

技术标签:

【中文标题】QTcpSocket 无法绑定到正确的 IP【英文标题】:QTcpSocket can't bind to right IP 【发布时间】:2014-09-20 04:51:52 【问题描述】:

我正在构建一个在具有多个 NIC(多宿主)的系统上运行的 linux Qt5/C++ 应用程序。我需要强制我的传出 TCP 连接使用特定的 NIC/IP。我已尝试以下代码,但 netstat 确认我的应用仍在使用错误的本地 NIC/IP。

if (m_tcpSocket->bind(localaddress)) qDebug() << "Bind success";
m_tcpSocket->connectToHost(
            remoteaddress,
            remoteport,
            QTcpSocket::ReadWrite);

我是不是叫错了?我看到“绑定成功”,所以我认为调用是正确的......但我无法解释为什么它不起作用


更新:我发现了这个错误报告:https://bugreports.qt.io/browse/QTBUG-29732

有解决方法吗?我在 QAbstractSocket 中看到了 setLocalAddress(),但我不确定它是否相同

【问题讨论】:

【参考方案1】:

我已确认原因是 Qt 库中的错误,报告为 here。这个错误自 Qt 4.8 以来就存在,我们今天在 Qt 5.3。很难相信如此重大的错误没有得到修复(对于任何使用网络的应用程序来说都很重要)

【讨论】:

抱歉没有提供信息的评论。自从 Digia 接管 Qt 以来,我注意到这是一件可悲的事情。他们开始不太关心 C++ 并将大部分资源用于 QML :(

以上是关于QTcpSocket 无法绑定到正确的 IP的主要内容,如果未能解决你的问题,请参考以下文章

QTcpSocket 状态不正确

如何正确确定 QTCPSocket 中的输入结束?

为啥 QTcpSocket 接收到错误的数据?

QTcpSocket,无法读取传入数据

无法写入 QRunnable 内的 QTcpSocket

QTcpSocket false 连接到 QTcpServer