我在xUbuntu 14.04上使用Qt 4.8 GCC 32bit。
我有下面一段代碼,一個TCP服務器,我爲了得到一些遠程命令併發送回一些答案使用 - 可通過TCP套接字:Qt:使用QTcpSocket - >我可以在socket上寫,但我無法讀取...
struct _MyRequest
{
unsigned long Request;
unsigned long Data;
} __attribute__((packed));
struct _MyAnswer
{
unsigned long Error;
unsigned long Filler;
} __attribute__((packed));
_MyRequest request;
_MyAnswer answer;
RemoteCmdServer::RemoteCmdServer(QObject * parent)
: QTcpServer(parent)
{
qDebug() << "Server started";
listen(QHostAddress("172.31.250.110"), 5004);
connect(this, SIGNAL(newConnection()), this, SLOT(processPendingRequest()));
}
void RemoteCmdServer::processPendingRequest()
{
qDebug() << "Process request";
QTcpSocket * clientConnection = nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
// get the request
int ret = clientConnection->read((char*)&request, sizeof(request));
qDebug() << "READ: " << ret;
if(ret == sizeof(request))
{
// send answer
clientConnection->write((char*)&answer, sizeof(answer));
}
qDebug() << "Disconnecting...";
clientConnection->disconnectFromHost();
}
我能寫正確,如果我發表意見if(ret == sizeof(request))
一行。
然而,我不能從套接字讀取(我總是得到0字節)。
我100%確定我用來發送數據包到我的應用程序的TCP工具工作正常。
這裏是我的應用程序輸出的調試:
Server started
Process request
READ: 0
Disconnecting...
我在做什麼錯?請指教!
在嘗試讀取數據之前,您必須首先等待數據可用。請參閱[文檔](http://doc.qt.io/qt-5/qabstractsocket.html)。 – thuga
我試了1000毫秒......它似乎沒有工作...... :( –
你可以編輯你的問題,並顯示你如何嘗試?你確定數據在這1秒內發送? – thuga