我正在创建一个简单的线程化TCP服务器(基于线程化的Fortune服务器示例)。我已经将readyRead信号连接到我的readCommand插槽,并且我确认在远程登录到服务器并发送了一个字符串(接着回车)后,将触发readCommand函数。
发送字符串HELLO后,下面的函数将输出“ In readCommand”,然后输出“ 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-> bytesAvailable(),那么当我通过telnet发送更多字符时,我会看到越来越多的字符。我只是没有从插座中取出它们...上面的代码是从“财富客户端”示例中复制的,因此我认为它可以工作。我使用QDataStream错误吗?
您不应该使用QTcpSocket初始化QDataStream。
您应该使用来从套接字io设备读取数据QByteArray QIODevice::readAll()
。
您应该使用“ <<”运算符将上一个操作的字节数组写入数据流。
因此,代码应如下所示:
void FortuneThread::readCommand()
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out << tcpSocketPtr->readAll();
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句