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均部署在同一个网卡上,使用同一个端口,可以进行软件与软件之间的单播通信吗?
回答:可以