qudp socket信号不触发_Qt QUdpSocket:readyRead()信号和相应的插槽不按预期工作

我有问题要找出为什么我的短QUdpSocket示例不起作用。我打算只使用一个UDP套接字在端口2007上以192.168.2.66读取和写入嵌入式设备。设备将始终在端口2007上向发件人进行回复。我使用UDP终端软件测试了设备,并按照我的说法工作。所以,我设计了一个简单的类来嵌入管理设备所需的功能:

class QUdp : public QObject

{

// Q_OBJECT

public:

explicit QUdp(QObject *parent = 0, const char *szHost = 0, uint16_t wPort = 0);

~QUdp();

bool Open();

int64_t Write(QByteArray &data);

int64_t Write(QString strData);

private:

QString m_strHost;

uint16_t m_wPort;

QUdpSocket *OUdp;

private slots:

void received();

};我想这个问题在Open方法中:

bool QUdp::Open()

{

QHostAddress OHost;

connect(OUdp, &QUdpSocket::readyRead, this, &QUdp::received);

bool zRet = OUdp->bind(QHostAddress::AnyIPv4, m_wPort, QUdpSocket::ShareAddress);

OHost.setAddress(m_strHost);

OUdp->connectToHost(OHost, m_wPort, QIODevice::ReadWrite);

return(zRet);

}

//------------------------------------------------------------------------我用connect()的Qt 5语法,m_strHost的值是“192.168.2.66”,m_wPort是2007

我的Write方法非常简单(添加#if 0中的部分以查看套接字是否接收到任何数据)

int64_t QUdp::Write(QString strData)

{

QByteArray data(strData.toStdString().c_str(), strData.length());

int64_t iCount = OUdp->write(data);

#if 0

bool zRecved = OUdp->waitForReadyRead(3000);

int64_t iRecvCount = OUdp->bytesAvailable();

#endif

return(iCount);

}

//------------------------------------------------------------------------这是我的测试received()方法...我写它只是为了看看信号插槽的工作与否:

void QUdp::received()

{

int64_t iRecvCount = OUdp->bytesAvailable();

}

//------------------------------------------------------------------------我不明白什么是错误的..我发现一些帖子说,不可能在Qt中使用一个UDP套接字来读写(Qt使用BSD套接字,所以它应该是可能的),但我的例子看起来像提出的解决方案,所以我真的不明白什么是行不通的。

你可能感兴趣的:(qudp,socket信号不触发)