我正在用Qt5.4(在Windows1064位上)测试一个通过udp进行的P2P通信。
在Windows to 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;
}
}发布于 2016-01-07 22:09:58
广播UDP数据报也可以由其发送方接收,这是预期的行为。例如,参见How to ignore your own broadcast udp packets。
https://stackoverflow.com/questions/34654593
复制相似问题