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