【发布时间】:2017-02-03 13:30:40
【问题描述】:
我在 xUbuntu 14.04 上使用 Qt 4.8 GCC 32 位。
我有以下代码,一个 TCP 服务器,我使用它来获取一些远程命令并发送回一些答案 - 通过 TCP 套接字:
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...
我做错了什么?请指教!
【问题讨论】:
-
您必须先等待数据可用,然后再尝试读取。见the docs。
-
我尝试了 1000 毫秒...它似乎不起作用... :(
-
你能编辑你的问题并展示你是如何尝试的吗?您确定在这 1 秒期间发送了数据吗?
-
只有几个字节,不是很大的数据量...我什至尝试等待 3 秒,但什么也没有... :(
-
请继续等待,直到您获得预期获得的字节数。