Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QUdpSocket在Windows上不接收数据,但在Ubuntu上工作?_C++_Sockets_Qt5_Winsock_Qudpsocket - Fatal编程技术网

C++ QUdpSocket在Windows上不接收数据,但在Ubuntu上工作?

C++ QUdpSocket在Windows上不接收数据,但在Ubuntu上工作?,c++,sockets,qt5,winsock,qudpsocket,C++,Sockets,Qt5,Winsock,Qudpsocket,我在Qt5.14中有一个应用程序,它在Linux(Ubuntu)上运行得非常好,但是,当我尝试在windows上构建它时,qtdpsocket接收数据 以下是头文件: #ifndef MYUDPSOCKET_H #define MYUDPSOCKET_H #include <QThread> #include <QMutex> #include <QUdpSocket> #include "third_party/readerwriterqueue/atom

我在Qt5.14中有一个应用程序,它在Linux(Ubuntu)上运行得非常好,但是,当我尝试在windows上构建它时,qtdpsocket接收数据

以下是头文件:

#ifndef MYUDPSOCKET_H
#define MYUDPSOCKET_H

#include <QThread>
#include <QMutex>
#include <QUdpSocket>
#include "third_party/readerwriterqueue/atomicops.h"
#include "third_party/readerwriterqueue/readerwriterqueue.h"

/**
 * @brief The MyUDPSocket class
 */
class MyUDPSocket: public QThread
{
    Q_OBJECT

public:

    /**
     * @brief MyUDPSocket : constructor
     * @param buffer : queue to keep incoming buffers stored
     */
    MyUDPSocket(moodycamel::BlockingReaderWriterQueue<QByteArray>& buffer);

    /**
     * @brief ~MyUDPSocket : destructor
     */
    ~MyUDPSocket();

    /*==========[Public Function Declarations]====================================*/
    void run();

public slots:
    /*==========[Public Slot Declarations]====================================*/
    /**
     * @brief readPackets
     * @return void
     */
    void readPackets();

private:
    QUdpSocket *udpSkt; /**< udp socket */
    moodycamel::BlockingReaderWriterQueue<QByteArray>& queue; /**< blocking queue */

};

#endif // MYUDPSOCKET_H
\ifndef MYUDPSOCKET\u H
#定义MYUDPSOCKET\u H
#包括
#包括
#包括
#包括“第三方/readerwriterqueue/atomicops.h”
#包括“第三方/readerwriterqueue/readerwriterqueue.h”
/**
*@brief-The-MyUDPSocket类
*/
类MyUDPSocket:publicqthread
{
Q_对象
公众:
/**
*@brief MyUDPSocket:constructor
*@param buffer:用于保存传入缓冲区的队列
*/
MyUDPSocket(moodycamel::BlockingReaderWriterQueue和buffer);
/**
*@brief~MyUDPSocket:析构函数
*/
~MyUDPSocket();
/*=============[公共功能声明]====================================*/
无效运行();
公众时段:
/*=============[公共插槽声明]====================================*/
/**
*@brief-readPackets
*@返回无效
*/
void readPackets();
私人:
QUdpSocket*udpSkt;/**
以下是源文件:

#include <QUdpSocket>
#include "myudpsocket.h"

MyUDPSocket::MyUDPSocket(moodycamel::BlockingReaderWriterQueue<QByteArray>& buffer)
    : queue(buffer)
{
    moveToThread(this);
    qDebug() << "Thread:" << currentThread() << "Setting up MyUDPSocket...";
}

MyUDPSocket::~MyUDPSocket()
{
    exit();
    wait();
    delete udpSkt;
    qDebug() << "MyUDPSocket Destroyed!";
}

void MyUDPSocket::run()
{
    udpSkt = new QUdpSocket(this);
    udpSkt->bind(QHostAddress::AnyIPv4, 56666);
    connect(udpSkt, SIGNAL(readyRead()), this, SLOT(readPackets()));
    // Setup event loop to receive packets
    exec();
}

void MyUDPSocket::readPackets()
{
    while (udpSkt->hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(udpSkt->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;

        udpSkt->readDatagram(datagram.data(), datagram.size(),
                             &sender, &senderPort);

        if(datagram.size() > 0) {
            queue.enqueue(datagram);
        }
    }
}
#包括
#包括“myudpsocket.h”
MyUDPSocket::MyUDPSocket(moodycamel::BlockingReaderWriterQueue&buffer)
:队列(缓冲区)
{
移动到线程(this);
qDebug()读取数据报(datagram.data(),datagram.size(),
&发送方和发送方端口);
if(datagram.size()>0){
排队(数据报);
}
}
}
代码的目标很简单,接收数据报并将其排队等待另一个线程处理

在Windows 10上测试了此功能,但它甚至不能与localhost一起使用。我尝试使用PacketSender或Microsoft UDP Sender/Receiver,但没有成功

有谁能解释一下为什么这在Windows 10上不起作用,但在Linux上却可以正常工作


谢谢

尝试关闭windows防火墙或允许你的应用通过它。我在Windows上遇到了这个问题,但通过
qtcsocket
。适用于Linux(Debian)、macOS Catalina,但不适用于Windows。关闭Windows防火墙有帮助吗?好的,我会试着回去报告。谢谢禁用防火墙无效。请尝试关闭windows防火墙或允许您的应用通过防火墙。我在Windows上遇到了这个问题,但通过
qtcsocket
。适用于Linux(Debian)、macOS Catalina,但不适用于Windows。关闭Windows防火墙有帮助吗?好的,我会试着回去报告。谢谢禁用防火墙不起作用。