gpt4 book ai didi

c++ - QTcpSocket : selecting source interface using bind() for connection to remote host with connectToHost(): need a workaround

转载 作者:行者123 更新时间:2023-11-28 06:39:07 24 4
gpt4 key购买 nike

我想使用特定的源接口(interface)连接到远程主机。我有3 个接口(interface):eth0 (192.168.230.100)、wlan0(10.0.9.100) 和 lo:

假设 mSocket 是类成员:

QTcpSocket mSocket;

在构造函数中我们使用:

bool ret = mSocket.bind(QHostAddress("10.0.9.100"));

然后在计时器中我们尝试连接:

void CamComponent::tryToConnect()
{
mSocket.connectToHost(QHostAddress(CameraIpAddr), CameraPort);
}

然后我使用 TCPDUMP 查看传出数据包,它们没有源 IP 10.0.9.100。使用 strace 我检查了 Qt 调用:

  • 套接字()
  • 绑定(bind)()
  • socket() <- 这会导致问题,这是 QT 内部的问题
  • 连接()

此问题的解决方法是什么?

最佳答案

这个问题与 Qt 无关。您只需要了解一点 TCP/IP 堆栈的工作原理即可。

当您尝试连接到远程服务器时,您需要提供其 IP 地址。在内部,您的操作系统将根据其路由表选择合适的出接口(interface)来发送这些连接数据包。 (冲突和默认路由这里就不多说了,google一下应该够你文化了)

因此,您只需将 QTcpSocket 用作客户端套接字,connectToHost 并让解析魔法发生。套接字绑定(bind)仅在服务器应用程序中有意义。

关于c++ - QTcpSocket : selecting source interface using bind() for connection to remote host with connectToHost(): need a workaround,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26272645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com