从QTcpSocket读取时为空缓冲区

TSG

我正在创建一个简单的线程化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错误吗?

lpapp
  • 您不应该使用QTcpSocket初始化QDataStream。

  • 您应该使用来从套接字io设备读取数据QByteArray QIODevice::readAll()

  • 您应该使用“ <<”运算符将上一个操作的字节数组写入数据流。

因此,代码应如下所示:

void FortuneThread::readCommand()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out << tcpSocketPtr->readAll();
    ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从QTcpSocket读取时为空缓冲区

来自分类Dev

Flatbuffer缓冲区始终为空

来自分类Dev

STD文件流已损坏?(内部文件缓冲区为空,无法读取输入)

来自分类Dev

如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

来自分类Dev

如何检查缓冲区是否为空?

来自分类Dev

检查stdin缓冲区是否为空

来自分类Dev

音频队列缓冲区为空错误

来自分类Dev

ReactJS简单图像上传缓冲区显示为空

来自分类Dev

Vim:如果缓冲区列表为空,则退出

来自分类Dev

Ubuntu文件系统缓冲区/缓存始终为空

来自分类Dev

缓冲区为空!:无法分配内存

来自分类Dev

RECV缓冲区为空,但返回值> 1

来自分类Dev

Superagent .attach() 文件或缓冲区数据为空

来自分类Dev

如何检查输入缓冲区是否为空?

来自分类Dev

使用glReadPixels(...)读取帧缓冲区时精度较低

来自分类Dev

使用套接字时重用读取缓冲区

来自分类Dev

从文件读取时如何停止堆栈缓冲区溢出?

来自分类Dev

如何使Emacs在启动时从stdin读取缓冲区?

来自分类Dev

读取 UNICODE_STRING 缓冲区时的访问冲突

来自分类Dev

NodeJS缓冲区-读取小端缓冲区

来自分类Dev

利用缓冲区溢出读取操作

来自分类Dev

NodeJS缓冲区从字节读取位

来自分类Dev

读取文件缓冲区通过

来自分类Dev

Python从缓冲区读取数据

来自分类Dev

从缓冲区读取Python 2.6

来自分类Dev

从 SuperpoweredAndroidAudioIO 输入读取缓冲区?

来自分类Dev

从带有缓冲区的网络输入流中读取的Java(需要排除空符号)

来自分类Dev

FBO深度缓冲区为红色

来自分类Dev

读取23个字节,即使缓冲区为10个字节