套接字c+中的数据包排序+; 我正在为客户机和服务器编写一个C++套接字程序,我应该把这些数据包保持在一个特定的顺序,还是保持它们发送的相同顺序? 提前谢谢
如果您使用的是TCP,则数据包排序由它处理。这意味着,如果您打开一个套接字并发送a、B和C,那么另一个套接字的一端将接收a、B和C套接字c+中的数据包排序+; 我正在为客户机和服务器编写一个C++套接字程序,我应该把这些数据包保持在一个特定的顺序,还是保持它们发送的相同顺序? 提前谢谢,c++,sockets,tcp,C++,Sockets,Tcp,如果您使用的是TCP,则数据包排序由它处理。这意味着,如果您打开一个套接字并发送a、B和C,那么另一个套接字的一端将接收a、B和C 另一方面,如果您使用的是UDP,那么就没有这样的保证。TCP套接字抽象为您提供了一个双向的可靠的字节流,因此数据将以与发送相同的顺序到达。但需要注意的是,TCP不知道您的应用程序级消息边界-您必须确保知道如何在接收端检测和缓冲部分消息。准确地说:您不知道数据包到达的顺序,但它们将按照最初发送的顺序通过API呈现给您。@Nikolai您的意思是,警告是数据可能会在不知
另一方面,如果您使用的是UDP,那么就没有这样的保证。TCP套接字抽象为您提供了一个双向的可靠的字节流,因此数据将以与发送相同的顺序到达。但需要注意的是,TCP不知道您的应用程序级消息边界-您必须确保知道如何在接收端检测和缓冲部分消息。准确地说:您不知道数据包到达的顺序,但它们将按照最初发送的顺序通过API呈现给您。@Nikolai您的意思是,警告是数据可能会在不知道的情况下被分区,因此并非所有数据都可以通过网络发送给您?@Paul,因此不需要给消息一个特定的顺序?这是API功能?我的意思是你不应该期望发送方的一个
write()
与接收方的一个read()
完全对应。由于TCP具有自己的打包功能,所以您可能会阅读更多或更少的一条消息,而跟踪消息边界是您的工作。