Qt UDpsocket 在同一台计算机上工作,但不能在同一网络上的两台计算机上工作

Qt UDpsocket working on same computer but not on two computers on same network

我可以在同一台计算机上发送和接收两个不同的程序 运行。但是当 运行 它们在不同的计算机上时无法执行相同的操作。两台计算机都在同一个局域网上。我正在研究 windows 10.

#include "communicationmanager.h"

communicationManager::communicationManager(int portNumber,int socketRole)
{
    //socketRole:0=Sender 1=Reciever
    //socket = new QUdpSocket(this);
    PortNumber = portNumber;
    socket = new QUdpSocket(this);
    if(socketRole == 1)
    {
        socket->bind(QHostAddress::LocalHost,PortNumber);
        connect(socket, SIGNAL(readyRead()), this, SLOT(recieve()));
    }
}

communicationManager::~communicationManager()
{
    //delete socket;
}

void communicationManager::prepareMessage(QString command,QString message,int recieverID)
{
   
    Command = command;
    Message = message;
    recieverID = recieverID;
}

void communicationManager::send()
{
    QByteArray datagram;
    QDataStream out(&datagram, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_13);
    out<<Command<<Message<<recieverID;
    socket->writeDatagram(datagram, QHostAddress::LocalHost, PortNumber);

}

void communicationManager::recieve()//For recieving data
{
    qDebug()<<"recieve";
    QByteArray datagram;

    do
    {
        datagram.resize(socket->pendingDatagramSize());
        socket->readDatagram(datagram.data(), datagram.size());
    } while (socket->hasPendingDatagrams());


    QDataStream in(&datagram, QIODevice::ReadOnly);
    QString command;
    QString message;
    int recieverID;
    in >>command>>message>>recieverID;
}

您需要绑定到 QHostAddress::Any 才能真正从本地计算机外部接收数据包。 QHostAddress::LocalHost只会接收来自同一台物理机的流量。