如何使用qtcpsocket写一个字符串?

时间:2016-11-10 02:22:15

标签: qt qtcpsocket qtcpserver

使用

时如何使用Qtcpsocket发送字符串
tcpsocket->write("hello");

tcpsocket->write("world");

etc..

tcpSocket->flush();
tcpSocket->waitForBytesWritten(3000);

它以一个字符串“hello world”发送它,我想让它只写一个时间,我想让客户端回复“你好”然后“世界”。

1 个答案:

答案 0 :(得分:4)

这不是TCP的工作原理。 TCP是字节流协议,而不是消息协议。您可以在发送端以编程方式编写N个字节,但远程端可能不会立即接收所有N个字节。实际上,当它在它的末尾执行recv时,它可能只获得1个字节,N-1个字节或一些其他数量的字节。 IP碎片,TCP分段,TCP窗口大小等问题可能会影响这一点。

此外,如果你写"你好"和"世界"分别到套接字,消息可以很容易地合并(在发送方或接收方),这样" HelloWorld"一次收到。同样,因为TCP是字节流,而不是基于消息的协议。

当你编写TCP代码时,你必须处理这些问题,因为它们确实发生了。

如果你想这样做:

每个单词都是"消息"。但每条消息都需要它的封装。也许你可以像这样发送消息:

 tcpsocket->write("hello|");
 tcpsocket->write("world|");

每个单词的尾随|管道字符是每个逻辑单词之间的分隔符。您也可以使用空格而不是管道字符。或者拥有自己的协议标头来指示要遵循的字节数。无论如何,接收方都要将字节流中的消息一起解析,以形成应用程序消息。