使用
时如何使用Qtcpsocket发送字符串tcpsocket->write("hello");
tcpsocket->write("world");
etc..
tcpSocket->flush();
tcpSocket->waitForBytesWritten(3000);
它以一个字符串“hello world”发送它,我想让它只写一个时间,我想让客户端回复“你好”然后“世界”。
答案 0 :(得分:4)
这不是TCP的工作原理。 TCP是字节流协议,而不是消息协议。您可以在发送端以编程方式编写N个字节,但远程端可能不会立即接收所有N个字节。实际上,当它在它的末尾执行recv
时,它可能只获得1个字节,N-1个字节或一些其他数量的字节。 IP碎片,TCP分段,TCP窗口大小等问题可能会影响这一点。
此外,如果你写"你好"和"世界"分别到套接字,消息可以很容易地合并(在发送方或接收方),这样" HelloWorld"一次收到。同样,因为TCP是字节流,而不是基于消息的协议。
当你编写TCP代码时,你必须处理这些问题,因为它们确实发生了。
如果你想这样做:
每个单词都是"消息"。但每条消息都需要它的封装。也许你可以像这样发送消息:
tcpsocket->write("hello|");
tcpsocket->write("world|");
每个单词的尾随|
管道字符是每个逻辑单词之间的分隔符。您也可以使用空格而不是管道字符。或者拥有自己的协议标头来指示要遵循的字节数。无论如何,接收方都要将字节流中的消息一起解析,以形成应用程序消息。