Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用qtcpsocket一次写入一个字符串?_Qt_Qtcpsocket_Qtcpserver - Fatal编程技术网

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

如何使用qtcpsocket一次写入一个字符串?,qt,qtcpsocket,qtcpserver,Qt,Qtcpsocket,Qtcpserver,使用时如何使用Qtcpsocket发送字符串 tcpsocket->write("hello"); tcpsocket->write("world"); etc.. tcpSocket->flush(); tcpSocket->waitForBytesWritten(3000); 它以一个字符串“hello world”发送,我想让它一次只写一个,我想让客户端接收“hello”然后是“world”。这不是TCP的工作方式。TCP是字节流协议,而不是消息协议。您可以

使用时如何使用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|");

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

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

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

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

当您想要执行以下操作时:

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

 tcpsocket->write("hello|");
 tcpsocket->write("world|");
其中,每个单词的尾随
|
管道字符是每个逻辑单词之间的分隔符。也可以使用空格代替管道字符。或者使用自己的协议头来指示要遵循的字节数。无论如何,由接收方将字节流中的消息解析回一起以形成应用程序消息