tcpsocket->write("hello");
tcpsocket->write("world");
etc..
tcpSocket->flush();
tcpSocket->waitForBytesWritten(3000);
,当它在一个字符串发送的“Hello World”使用与QTcpSocket,如何发送字符串,我想要什么使它只写一个时刻,我希望让客户recive“你好”,然后“世界”。
tcpsocket->write("hello");
tcpsocket->write("world");
etc..
tcpSocket->flush();
tcpSocket->waitForBytesWritten(3000);
,当它在一个字符串发送的“Hello World”使用与QTcpSocket,如何发送字符串,我想要什么使它只写一个时刻,我希望让客户recive“你好”,然后“世界”。
这不是TCP的工作方式。 TCP是一种字节流协议,不是消息协议。您可能会在发送端以编程方式写入N个字节,但远程端可能不会同时收到全部N个字节。实际上,当它在其末尾执行recv
时,它可能只会得到1个字节,N-1个字节或一些其他数量的字节。诸如IP碎片,TCP分段,TCP窗口大小等问题可能会影响到这一点。此外,如果您将“Hello”和“World”分别写入套接字,则可以轻松地将消息合并(在发送方或接收方),以便一次接收“HelloWorld”。同样,因为TCP是一个字节流,而不是基于消息的协议。
当你编写TCP代码时,你必须处理这些问题,因为它们确实发生了。
当你想做的事:
每个字是一个“消息”。但每条消息都需要它只是封装。也许你可以发送的邮件是这样的:
tcpsocket->write("hello|");
tcpsocket->write("world|");
每个单词的后|
竖线是每个逻辑字之间的分隔符。你也可以使用空格而不是管道字符。或者有你自己的协议头来指示要跟随的字节数。无论如何,由接收方来解析来自字节流的消息一起形成应用消息。