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