我有一个使用QT和JAVA服务器的C ++客户端,并且已成功从客户端写入服务器,但是无法从服务器写入客户端。我的代码:
QString
Client::readTCP ( )
{
socketTCP->waitForReadyRead();
QTextStream in (socketTCP);
return in.readAll() ;
}
// Later on
qDebug() << Client::readTCP();
但是,无论我选择哪种方法,都无法从服务器获得响应。服务器代码如下:
DataOutputStream output = new DataOutputStream (SOCKET.getOutputStream());
output.writeBytes ( "myString" );
回答:
之所以有效,要么是因为我更改in.readAll()
为,in.readLine()
要么是因为我在服务器启动后等待了几秒钟,然后才发送消息。
该QTextStream::readAll
函数尝试读取流的全部内容。该消息是流的全部内容还是不是流的全部内容。
如果此消息不是流的全部内容,则不应返回。readAll
尽管仅指定返回流的所有内容,但如果仅返回流的部分内容,则将是一个严重的错误。
如果这是流的全部内容,则服务器已损坏。如果它没有关闭套接字,那么客户如何知道它已收到全部内容?除非有其他指示消息结束的方法,否则必须通过关闭流来指示它,并且您不会显示服务器正在关闭流。
当我遇到这样的问题时,我将重复我总是给出的建议-永远不要实施网络协议,除非您在协议规范中指定该协议。否则,不可能解决服务器和客户端不同意的问题,因为无法知道哪一端是正确的。在这里,服务器和客户端在如何标记消息的末尾上存在分歧,并且没有协议规范可供参考,因此无法知道要修复的末尾。
如果您有协议规范,则只需查看解释如何标记和检测消息结尾的部分即可。然后,您可以修复不符合规范的任何一端。(或者,如果规范没有说明如何,那么请修订规范!显然,这必须以某种方式发生,并且规范的工作是解释如何做。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句