1. 程式人生 > 其它 >Qt 多軟體同時執行 IP繫結問題

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均部署在同一個網絡卡上,使用同一個埠,可以進行軟體與軟體之間的單播通訊嗎?  

回答:可以