Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
套接字c+中的数据包排序+; 我正在为客户机和服务器编写一个C++套接字程序,我应该把这些数据包保持在一个特定的顺序,还是保持它们发送的相同顺序? 提前谢谢_C++_Sockets_Tcp - Fatal编程技术网

套接字c+中的数据包排序+; 我正在为客户机和服务器编写一个C++套接字程序,我应该把这些数据包保持在一个特定的顺序,还是保持它们发送的相同顺序? 提前谢谢

套接字c+中的数据包排序+; 我正在为客户机和服务器编写一个C++套接字程序,我应该把这些数据包保持在一个特定的顺序,还是保持它们发送的相同顺序? 提前谢谢,c++,sockets,tcp,C++,Sockets,Tcp,如果您使用的是TCP,则数据包排序由它处理。这意味着,如果您打开一个套接字并发送a、B和C,那么另一个套接字的一端将接收a、B和C 另一方面,如果您使用的是UDP,那么就没有这样的保证。TCP套接字抽象为您提供了一个双向的可靠的字节流,因此数据将以与发送相同的顺序到达。但需要注意的是,TCP不知道您的应用程序级消息边界-您必须确保知道如何在接收端检测和缓冲部分消息。准确地说:您不知道数据包到达的顺序,但它们将按照最初发送的顺序通过API呈现给您。@Nikolai您的意思是,警告是数据可能会在不知

如果您使用的是TCP,则数据包排序由它处理。这意味着,如果您打开一个套接字并发送a、B和C,那么另一个套接字的一端将接收a、B和C


另一方面,如果您使用的是UDP,那么就没有这样的保证。

TCP套接字抽象为您提供了一个双向的可靠的字节流,因此数据将以与发送相同的顺序到达。但需要注意的是,TCP不知道您的应用程序级消息边界-您必须确保知道如何在接收端检测和缓冲部分消息。

准确地说:您不知道数据包到达的顺序,但它们将按照最初发送的顺序通过API呈现给您。@Nikolai您的意思是,警告是数据可能会在不知道的情况下被分区,因此并非所有数据都可以通过网络发送给您?@Paul,因此不需要给消息一个特定的顺序?这是API功能?我的意思是你不应该期望发送方的一个
write()
与接收方的一个
read()
完全对应。由于TCP具有自己的打包功能,所以您可能会阅读更多或更少的一条消息,而跟踪消息边界是您的工作。