我遇到了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;
}
答案 0 :(得分:1)
如果在处理第一个数据报时有更多数据可用,则可能会出现此问题。将其添加到插槽中它应该可以正常工作:
int readCount;
while (udpSock->hasPendingDatagrams())
{
readCount = udpSock->readDatagram(buffer, 4096);
cout << "readCount = " << readCount << endl;
}
答案 1 :(得分:0)
您可以尝试使用以下方法实现基本接收器:Udp Receiver
可能你没有从插槽中正确读取所以看起来信号没有发出。或者,您在连接广告位后呼叫bind
:您可能应该在连接广告位之前致电bind
。