Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从QTcpSocket读取时缓冲区为空_Qt_Qtnetwork_Qtcore - Fatal编程技术网

从QTcpSocket读取时缓冲区为空

从QTcpSocket读取时缓冲区为空,qt,qtnetwork,qtcore,Qt,Qtnetwork,Qtcore,我正在创建一个简单的线程化TCP服务器(基于线程化Fortune服务器示例)。我已将readyRead信号连接到我的readCommand插槽,并确认readCommand函数在我远程登录到服务器并发送字符串(后跟enter)后启动 下面的函数在我发送字符串HELLO后输出“In readCommand”,然后输出“new inBuffer”总是显示为空(“”) void FortuneThread::readCommand() { 缓冲区中的qDebug(); qDebug() 不应使用QTc

我正在创建一个简单的线程化TCP服务器(基于线程化Fortune服务器示例)。我已将readyRead信号连接到我的readCommand插槽,并确认readCommand函数在我远程登录到服务器并发送字符串(后跟enter)后启动

下面的函数在我发送字符串HELLO后输出“In readCommand”,然后输出“new inBuffer”总是显示为空(“”)

void FortuneThread::readCommand()
{
缓冲区中的qDebug();
qDebug()
  • 不应使用QTcpSocket初始化QDataStream

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


  • 您应该使用“将上一个操作的字节数组写入数据流,这样的代码可以工作:

    QByteArray res;
    res.reserve(m_tcp_socket_ptr->bytesAvailable());
    res = m_tcp_socket_ptr->readAll();
    
    qDebug() << res;
    
    QByteArray res;
    res.reserve(m_tcp_socket_ptr->bytesavable());
    res=m_tcp_socket_ptr->readAll();
    
    qDebug()我不确定Michelle,但为什么要使用“QDataStream::Qt_4_0?”“。您使用的是哪个Qt版本?另外,tcp套接字ptr是FortuneThread的类成员吗?您在发送数据时看到了正确的长度,而不是检查数据是否在增长吗?我直接从他们的示例中复制了Qt_4_0…但我认为这不重要,因为另一端(客户端)不是编码,只是通过telnet发送字符。如果我从telnet客户端连接,键入HELLO并输入,字节计数将增长到7(我假设这意味着我的客户端发送了/n/r,或者可能是一个空值?).我想你在这里发现了什么。我删除了QDataStream,现在可以访问角色了。我想你的解决方案比我想象的要复杂一些,但是谢谢。
    void FortuneThread::readCommand()
    {
        QByteArray block;
        QDataStream out(&block, QIODevice::WriteOnly);
        out << tcpSocketPtr->readAll();
        ...
    }
    
    QByteArray res;
    res.reserve(m_tcp_socket_ptr->bytesAvailable());
    res = m_tcp_socket_ptr->readAll();
    
    qDebug() << res;