gpt4 book ai didi

Qt QUdpSocket readyRead() 信号未触发

转载 作者:行者123 更新时间:2023-12-04 03:11:17 52 4
gpt4 key购买 nike

我正在尝试编写一个小型 UDP 服务器应用程序。

我有一个客户端传输到这个应用程序套接字,我已经使用一个小的 UDP 回显程序(它将端口上接收到的数据回显到屏幕上)验证了它发送正常,而且,我可以看到在 wireshark 中接收到的数据包.

我正在使用 QUdpSocket,看起来这个绑定(bind)在设置时是正确的——但是 readyRead() 信号似乎从来没有被触发过。

我在下面包含了我的一些代码 - 目前我只是想模拟这个小回声程序。

只是为了给下面的代码提供一些背景信息——在 UI 上按下按钮会在 UI 上输入的端口上调用“setupNewSocket”。

#include "sockethandler.h"

SocketHandler::SocketHandler(QObject *parent) :
QObject(parent)
{
udpSocket = new QUdpSocket(this);

connect( &w, SIGNAL(openNewUDPSocket(quint16)), this, SLOT(setupNewSocket(quint16)) );
connect( this, SIGNAL(printOnUI(QString,QString,QString)), &w, SLOT(updateUI(QString,QString,QString)) );

w.show();
}

void SocketHandler::readPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;

udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);

QString data = QString( datagram.data() );
QString sender_address = sender.toString();
QString sender_port = QString("%1").arg(senderPort);

emit printOnUI(data, sender_address, sender_port);

}

}
void SocketHandler::setupNewSocket(quint16 port)
{
if( udpSocket->bind(QHostAddress::LocalHost, port) )
{
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}
else
{
// bind has failed
}

}

最佳答案

QHostAddress::LocalHost绑定(bind)到 127.0.0.1 。

可能您需要使用绑定(bind)到 0.0.0.0 的 QHostAddress::Any

关于Qt QUdpSocket readyRead() 信号未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571057/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com