0
我正在測試與Qt 5.4 udp的P2P通信(在Windows 10 64位)。接收沒有自己的數據發送由QUdpSocket
在Windows到Windows上,此代碼可以從另一個設備獲取消息(「SendFromHost」)。但在Android到Windows上,此代碼獲得了自己發送的消息(「SendFromGuest」)並完成了該程序。
請告訴我如何得到沒有自己發送的消息。
void Network::start()
{
findLanSocket = new QUdpSocket(this);
connect(findLanSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
this, SLOT(onUdpStateChanged(QAbstractSocket::SocketState)));
findLanSocket->bind(findPort, QUdpSocket::ShareAddress);
QByteArray datagram = "SendFromGuest";
findLanSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, findPort);
}
void Network::onUdpStateChanged(QAbstractSocket::SocketState s)
{
if (s == QAbstractSocket::BoundState) {
connect(findLanSocket, SIGNAL(readyRead()), this, SLOT(onReadyUdpRead()));
}
}
void Network::onReadyUdpRead()
{
QByteArray datagram; QHostAddress haddr;
datagram.resize(findLanSocket->pendingDatagramSize());
findLanSocket->readDatagram(datagram.data(), datagram.size(), &haddr);
QString rev = QString::fromUtf8(datagram);
if (rev == "SendFromHost"){
result = haddr.toString();
qDebug() << result;
success();
return;
}
}
你知道Qt 5的選項參數嗎? – Tank2005
我不認爲Qt提供了一個選項(除了做廣播而不是廣播)。對於廣播,您必須使用我已鏈接的答案中的一個技巧。 – Ilya
注意:對於我而言,我不會使用IP地址,而是在數據報中插入一個唯一的(內部生成的)ID,以便我能夠識別自己的消息(因爲它們包含我的ID)並丟棄它們。 – Ilya