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

how to write one string at time using qtcpsocket?

如何使用 Qtcpsocket 发送字符串,当使用

tcpsocket->write("hello");

tcpsocket->write("world");

etc..

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

它以一个字符串 "hello world" 发送它,我想让它一次只写一个,我想让客户端接收 "hello" 然后 "world".

这不是 TCP 的工作方式。 TCP是字节流协议,不是消息协议。您可能以编程方式在发送端写入 N 个字节,但远程端可能不会一次接收到所有 N 个字节。事实上,当它在其末端执行 recv 时,它可能只会获得 1 个字节、N-1 个字节或其他一些字节数。 IP 碎片、TCP 分段、TCP window 大小等问题都会对此产生影响。

此外,如果您将 "Hello" 和 "World" 分别写入套接字,则消息很容易合并(在发送方或接收方),这样 "HelloWorld" 就会全部收到立刻。同样,因为 TCP 是字节流,而不是基于消息的协议。

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

当你想做的时候:

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

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

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