使用时如何使用 Qtcpsocket 发送字符串
tcpsocket->write("hello");
tcpsocket->write("world");
etc..
tcpSocket->flush();
tcpSocket->waitForBytesWritten(3000);
它以一个字符串“hello world”发送,我想让它一次只写一个,我想让客户端接收“hello”然后是“world”。
使用时如何使用 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 窗口大小等问题会影响这一点。
此外,如果您将“Hello”和“World”分别写入套接字,则消息很容易合并(在发送方或接收方),这样就可以一次接收到“HelloWorld”。同样,因为 TCP 是字节流,而不是基于消息的协议。
当您编写 TCP 代码时,您必须处理这些问题,因为它们确实会发生。
当你想做的时候:
每个词都是一个“信息”。但是每条消息都需要它只是封装。也许你可以这样发送消息:
tcpsocket->write("hello|");
tcpsocket->write("world|");
其中每个单词的尾部|
竖线字符是每个逻辑单词之间的分隔符。您也可以使用空格而不是管道字符。或者有你自己的协议头来指示要遵循的字节数。无论如何,由接收方将字节流中的消息解析回一起以形成应用程序消息。