我正在创建一个简单的线程化TCP服务器(基于Fortune服务器线程示例)。我已将readyRead信号连接到readCommand插槽,并确认readCommand函数在telnet到我的服务器并发送字符串(后跟enter)后触发。从QTcpSocket读取时的空缓冲区
下面的函数在发送字符串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发送更多。我只是没有从套接字中取出它们......上面的代码是从Fortune Client例子中复制的,所以我认为它会起作用。我使用QDataStream是否错误?
我不知道米歇尔,但你为什么要使用“QDataStream :: Qt_4_0" 。你正在使用哪个Qt版本?另外,tcp socket是FortuneThread的一个类成员吗? – lpapp
发送数据时是否看到正确的长度,而不是检查其是否正在增长? – lpapp
我直接从他们的例子中复制了Qt_4_0 ...但我不认为这很重要,因为另一端(客户端)不是编码,只是通过telnet发送字符。如果我从telnet客户端连接,输入HELLO并输入,字节数将增长到7(我认为这意味着我的客户端发送了/ n/r,或者最后可能是空值?)。 – TSG