C++ QUdpSocket在Windows上不接收数据,但在Ubuntu上工作?
我在Qt5.14中有一个应用程序,它在Linux(Ubuntu)上运行得非常好,但是,当我尝试在windows上构建它时,qtdpsocket接收数据 以下是头文件: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
#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防火墙有帮助吗?好的,我会试着回去报告。谢谢禁用防火墙不起作用。