如何通过路由器在QT中发送和接收UDP数据包

时间:2016-12-20 10:42:34

标签: c++ qt sockets networking udp

我有一个发送和接收广播消息的程序。如果我在同一台PC上运行这些程序的两个副本,一切正常。如果我在不同的PC上运行每个副本,则不会收到广播消息。我利用Wireshark来验证数据包是否已发送(是的)。此外,在PC" A" Wireshark不会观察发送的数据包,而是在PC" B"一切都好。问题可能出在硬件上吗?

收件人代码:

Receiver::Receiver(QObject *parent) : QObject(parent)
{
    udpSocket = new QUdpSocket(this);
    udpSocket->bind(45454, QUdpSocket::ShareAddress);

    timer = new QTimer(this);
    timer->start(500);

    connect(timer, SIGNAL(timeout()), this, SLOT(processPendingDatagrams()));
}

void Receiver::processPendingDatagrams()
{
    qDebug("first entrance");

    while (udpSocket->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(datagram.data(), datagram.size());

        qDebug() << datagram.data();
        qDebug("Receive");

        sendToQML(datagram.data());
    }

}

发件人代码:

Sender::Sender(QObject *parent) : QObject(parent)
{
    messageNo  = 0;
    udpSocket = new QUdpSocket(this);
}

void Sender::broadcastDatagram(int message)
{
    QByteArray datagram = QByteArray::number(message);
    udpSocket->writeDatagram(datagram.data(), datagram.size(),
                             QHostAddress::Broadcast, 45454);
}

void Sender::sendBroadcast(int message)
{
    qDebug() << message;

    broadcastDatagram(message);
}

更新

我设法通过以太网连接(通过电缆)发送和接收数据包。

0 个答案:

没有答案