首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTcpSocket:使用bind()选择使用connectToHost()连接到远程主机的源接口:需要一个解决办法

QTcpSocket:使用bind()选择使用connectToHost()连接到远程主机的源接口:需要一个解决办法
EN

Stack Overflow用户
提问于 2014-10-09 07:27:34
回答 1查看 1.4K关注 0票数 0

我想使用某些源接口连接到远程主机。我有三个接口: eth0 (192.168.230.100)、wlan0(10.0.9.100)和lo:

假设mSocket是类成员:

代码语言:javascript
运行
复制
QTcpSocket mSocket;

在构造函数中,我们使用:

代码语言:javascript
运行
复制
bool ret = mSocket.bind(QHostAddress("10.0.9.100"));

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

代码语言:javascript
运行
复制
void CamComponent::tryToConnect()
{    
    mSocket.connectToHost(QHostAddress(CameraIpAddr), CameraPort);
}

在此之后,我使用TCPDUMP查看传出数据包,它们没有源IP 10.0.9.100。使用strace时,我检查了Qt是否调用:

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

解决这个问题的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-10-09 10:12:56

这个问题与Qt无关。您只需稍微了解一下TCP/IP堆栈是如何工作的。

当您试图连接到远程服务器时,您将提供其IP地址。在内部,您的操作系统将根据其路由表选择适当的out接口来发送这些连接数据包。(在这里,我不会过多地谈论冲突和默认路由,谷歌应该足以打造你的文化)

因此,您只需使用您的QTcpSocket作为客户端套接字,connectToHost,并让分辨率魔术发生。套接字绑定仅在服务器应用程序中有意义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26272645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档