QUdpSocket 不发出 readyRead() 信号
QUdpSocket doesn't emit readyRead() signal
我遇到了QUdpSocket
的问题。信号readyRead()
似乎永远不会发出。因此,我决定创建QTimer
并检查套接字读队列的状态。这样,我确保套接字正常工作(bytesAvailable()
显示字节数)和信号/插槽机制也在工作(timeout()信号发生)。但是为什么readyRead()
不排放呢?谢谢。
QString EthernetListener::listen()
{
udp_socket = new QUdpSocket(this);
connect(udp_socket, SIGNAL(readyRead()), this, SLOT(process_messages()));
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(dummy_slot()));
timer->start(1000);
bool res = udp_socket->bind(QHostAddress::Any, 1947, QUdpSocket::ShareAddress);
if (!res)
return QString("Не удалось подключиться к хосту").toUtf8();
return QString("Идет прослушка сети. Хост: ");
}
void EthernetListener::dummy_slot()
{
int test = udp_socket->bytesAvailable();
}
void EthernetListener::process_messages()
{
bool bp = true;
}
如果在处理第一个数据报的同时有更多的数据可用,则可能发生此问题。将它添加到插槽中,它应该可以正常工作:
int readCount;
while (udpSock->hasPendingDatagrams())
{
readCount = udpSock->readDatagram(buffer, 4096);
cout << "readCount = " << readCount << endl;
}
您可以尝试使用这个实现基本接收器:Udp接收器
可能您没有正确地从插槽读取,所以看起来信号没有发出。或者您在连接槽后调用bind
:可能您应该在连接槽之前调用bind
。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- QSerialPort readyRead() 信号无法正常工作
- 写入QTcpSocket并不总是在对面的QTcpSockets上发出readyRead信号
- QTcpSocket readyRead() 信号发出两次
- 为什么执行socket :: readyread()的新信号,即使其较早的插槽仍在处理
- 来自qsocket的ReadyRead()信号的行为
- 问题5.2:QLocalServer接收重复的readyRead信号
- qt qudpsocket:readyread()信号和相应的插槽无法正常工作
- 我如何知道哪个 QTcpSocket 发出了 readyRead() 信号
- Qt udp套接字,什么会触发套接字的readyRead信号?
- 调用QextSerialPort(QIODevicece)的readyRead()信号的速度不够快
- Qt 5和QProcess用信号/插槽readyRead重定向stdout
- 如何确保来自 QTcpSocket 的 readyRead() 信号不会被错过?
- QtSerialPort:readAll不会产生所有数据,也没有新的readyRead信号
- 从 QTcpSocket 读取而不使用 readyRead() 信号
- QUdpSocket 不发出 readyRead() 信号