Qt 多软件同时运行 IP绑定问题

最近一直使用Qt开发一些配合设备调试用的软件,从中遇到一些问题,简单记录一下。

背景:在同一台笔记本上,同时运行3个基于Qt开发的软件,这三个软件之间通过UDP组播或单播进行通信

场景一:将3个软件(A、B、C)需要绑定的IP设置在同一个网卡上,绑定同一个端口号

由于存在A软件发送组播,B软件需要接收的相关组播里的报文情况,故需要网卡可以自发自收,即

recvSocket->bind(QHostAddress("192.1.104.1"),0x6666,QAbstractSocket::ShareAddress);//绑定IP和端口号
recvSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,1);//设置回环,可自发自收

注:由于在windows系统上运行,故在网络的接收端套接字设置即可

场景二:将3个软件(A、B、C)需要绑定的IP设置在不同的网卡上,绑定同一个端口号,即该笔记本为多网卡环境

多网卡同时运行,即使设置了多播回环,软件之间也无法通过UDP组播进行通信,故需要在加入组播时,绑定对应网卡

//可以查看网卡信息
QList<QNetworkInterface>ifaceList = QNetworkInterface::allInterfaces();
for(int i =0;i<ifaceList.count();i++)
{
    qDebug()<<ifaceList.at(i).humanReadableName()<<endl;
}
//接收网络套接字 设定网卡
recvSocket->setMulticastInterface(ifaceList[0]);
//加入组播,添加对应网卡
recvSocket->joinMulticastGroup(QHostAddress("224.100.200.113"),ifaceList[0]);

问题:多个软件同时运行,且对应绑定的IP均部署在同一个网卡上,使用同一个端口,可以进行软件与软件之间的单播通信吗?  

回答:可以

 

posted @ 2022-03-10 14:45  羽……  阅读(607)  评论(0编辑  收藏  举报