我有問題要找出爲什麼我的短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套接字,所以它應該是可能的),但我的例子看起來是建議的解決方案,所以我真的不明白什麼是不工作的。