我正在创建一个简单的线程TCP服务器(基于线程Fortune服务器示例)。我已经将readyRead信号连接到我的readCommand插槽,并且我确认在我远程登录到我的服务器并发送了一个字符串(然后输入)后,readCommand函数触发。
下面的函数输出“在readCommand”一旦我发送字符串HELLO,那么输出“new inBuffer”总是显示为空(“”)。
void FortuneThread::readCommand()
{
qDebug() << "in readCommand" << endl;
QDataStream in(tcpSocketPtr);
in.setVersion(QDataStream::Qt_4_0);
in >> inBuffer;
qDebug() << "new inBuffer: " << inBuffer << endl;
...
}
如果我打印出tcpSocket-&gt; bytesAvailable(),那么当我通过telnet发送更多字符时,我会看到越来越多的字符。我只是没有将它们从套接字中取出......上面的代码是从Fortune Client示例中复制的,所以我认为它会起作用。我使用QDataStream错了吗?
答案 0 :(得分:0)
您不应使用QTcpSocket初始化QDataStream。
您应该使用QByteArray QIODevice::readAll()
从套接字io设备中读取数据。
您应该使用“&lt;&lt;”将上一个操作的字节数组写入数据流操作
所以,代码看起来应该是这样的:
void FortuneThread::readCommand()
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out << tcpSocketPtr->readAll();
...
}
答案 1 :(得分:0)
这些代码可以起作用:
QByteArray res;
res.reserve(m_tcp_socket_ptr->bytesAvailable());
res = m_tcp_socket_ptr->readAll();
qDebug() << res;