0

QUdpSocket を使用してハートビート メッセージをブロードキャストするアプリケーションがあります。

mpsckUDP = new QUdpSocket(this);
mpsckUDP->bind(QHostAddress::Broadcast, clsMainWnd::mscuint16Port);
QObject::connect(mpsckUDP, SIGNAL(readyRead()), this, SLOT(onUDPdataRdh()));

mscuint16Port は次のとおりです。

const quint16 clsMainWnd::mscuint16Port(8081);

メッセージを送信するコード:

const QByteArray carybytData(/*My message*/);
qint64 int64Written(mpsckUDP->writeDatagram(carybytData, QHostAddress::LocalHost, clsMainWnd::mscuint16Port));

int64Written には、writeDatagram を呼び出すたびに 47 が割り当てられます。同じシステムで実行されるクライアント アプリケーションでは、次のようになります。

mpsckUDP = new QUdpSocket(this);
uint uintPort(8081);
mpsckUDP->bind(QHostAddress::LocalHost, uintPort);
QObject::connect(mpsckUDP, SIGNAL(readyRead()), this, SLOT(onUDPdataRdy()));

スロット:

void clsMainWnd::onUDPdataRdy() {
    QHostAddress objSender;
    QByteArray arybytData;
    quint16 uint16Port;
    arybytData.resize(mpsckUDP->pendingDatagramSize());
    mpsckUDP->readDatagram(arybytData.data(), arybytData.size(), &objSender, &uint16Port);
    ...
}

同じシステムのクライアント アプリケーションで 2 つのインスタンスを起動します。問題は、最初のインスタンスのみが UDP ブロードキャストを受信して​​おり、もう 1 つのインスタンスは何も受信していないということです...

意図は、多くのクライアントと単一のブロードキャスト アプリケーションを持つことです。

4

1 に答える 1