我想使用某些源接口连接到远程主机。我有三个接口: 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是否调用:
解决这个问题的方法是什么?
发布于 2014-10-09 10:12:56
这个问题与Qt无关。您只需稍微了解一下TCP/IP堆栈是如何工作的。
当您试图连接到远程服务器时,您将提供其IP地址。在内部,您的操作系统将根据其路由表选择适当的out接口来发送这些连接数据包。(在这里,我不会过多地谈论冲突和默认路由,谷歌应该足以打造你的文化)
因此,您只需使用您的QTcpSocket作为客户端套接字,connectToHost
,并让分辨率魔术发生。套接字绑定仅在服务器应用程序中有意义。
https://stackoverflow.com/questions/26272645
复制相似问题