繁体   English   中英

QUdpSocket不发出readyRead()信号

[英]QUdpSocket doesn't emit readyRead() signal

我遇到了QUdpSocket问题。 信号readyRead()似乎从未发出过。 因此,我决定创建QTimer并检查套接字读取队列的状态。 这样,我确保套接字可以正常工作( bytesAvailable()显示字节数)并且信号/插槽机制也可以工作(发生timeout()信号)。 但是为什么readyRead()不发出? 谢谢。

Qt 5.1

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 Receiver
可能是您未从插槽中正确读取数据,因此似乎未发出信号。 或者,您在连接插槽之后正在调用bind :可能您应该连接插槽之前调用bind

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM