我有问题要找出为什么我的短QUdpSocket示例不起作用。我计划只使用一个UDP套接字在端口2007上以192.168.2.66读取和写入嵌入式设备。设备将始终在端口2007上回复发件人。我使用UDP终端软件测试了设备,并按照我的说法工作。所以,我设计了一个简单的类嵌入到管理设备所需要的功能:Qt QUdpSocket:readyRead()信号和相应的插槽不能正常工作
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();
};
我想,这个问题是在打开方法:
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);
}
//------------------------------------------------------------------------
我使用了Qt 5语法用于连接(),m_strHost值是“192.168.2.66”和m_wPort是2007
我写的方法很简单(加入内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);
}
//------------------------------------------------------------------------
,这是我收到的测试()方法......我写它只是为了看看信号槽工程或不:
void QUdp::received()
{
int64_t iRecvCount = OUdp->bytesAvailable();
}
//------------------------------------------------------------------------
我不明白什么是错的。我发现有些帖子说这是不可能的,只能在Qt中使用一个UDP套接字来读写(Qt使用BSD套接字,所以它应该是可能的),但我的例子看起来是建议的解决方案,所以我真的不明白什么是不工作的。