首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUdpSocket不发出readyRead()信号

QUdpSocket不发出readyRead()信号
EN

Stack Overflow用户
提问于 2014-03-11 21:55:42
回答 2查看 3K关注 0票数 1

我遇到了一个关于QUdpSocket的问题。信号readyRead()似乎从未发出过。因此,我决定创建QTimer并检查套接字读取队列的状态。通过这种方式,我确保套接字正常工作(bytesAvailable()显示字节数),信号/槽机制也正常工作(出现了timeout()信号)。但是为什么readyRead()不发射呢?谢谢。

Qt 5.1

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2016-02-12 03:35:07

如果仍在处理第一个数据报的同时有更多数据可用,则可能会出现此问题。将这个添加到插槽中,它应该可以很好地工作:

代码语言:javascript
复制
int readCount;
while (udpSock->hasPendingDatagrams())
{
    readCount = udpSock->readDatagram(buffer, 4096);
    cout << "readCount = " << readCount << endl;
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-11 22:21:32

您可以尝试使用以下方法实现基本的接收器:Udp Receiver

可能您没有从插槽中正确读取数据,因此看起来信号没有发出。或者您在连接插槽之后调用bind:也许您应该在连接插槽之前调用bind

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22327851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档