0
我正在使用Qt 5.9,我正在使用雙向(發送和接收)QUdpSocket。 我怎樣才能避免接收同一個消息剛剛發送到同一個套接字?QUdpSocket環回數據報
下面的代碼
// Socket init
this->UdpSocket->bind(QHostAddress::Any, ARTNET_PROTOCOL_PORT);
connect(this->UdpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()), Qt::UniqueConnection);
[...]
void ArtNetManager::readPendingDatagrams()
{
QNetworkDatagram networkDatagram;
qDebug("Udp datagram received");
while(this->UdpSocket->hasPendingDatagrams())
{
networkDatagram = this->UdpSocket->receiveDatagram();
qDebug("Received datagram from IP address: %s", networkDatagram.senderAddress().toString().toLatin1().data());
this->receiveDatagram(networkDatagram.data());
}
}
void ArtNetManager::sendDatagram()
{
QByteArray ArtNet_RawMsg;
ArtNet_RawMsg.append("Test program");
// Writes data on the UDP socket
qint64 sentBytes = this->UdpSocket->writeDatagram(ArtNet_RawMsg, QHostAddress::Broadcast, ARTNET_PROTOCOL_PORT);
if(sentBytes == -1)
{
qDebug("Cannot send data on UPD socket. Error: %d", this->UdpSocket->error());
}
else if(sentBytes != ArtNet_RawMsg.size())
{
qDebug("Wrong number of bytes sent. Bytes sent on socket: %d, tx buffer length: %d", sentBytes, ArtNet_RawMsg.size());
}
}
不,它不是這樣做的原因。即使我將連接PC與ArtNet主機設備的以太網電纜斷開連接,我的程序在發送它們之後仍會立即收到消息。我已經將qDebug調用放入'readPendingDatagrams'函數中,以檢查消息的發送者:IP地址與我在PC上設置的IP地址相同,因此這確認雙向QUdpSocket接收它發送的消息。 – Andre
Your網絡設置搞砸了。這不是正常的行爲。那是什麼平臺(非常精確):? –