gpt4 book ai didi

c++ - socket发送信息的时机(TCP、C++)

转载 作者:可可西里 更新时间:2023-11-01 02:57:46 26 4
gpt4 key购买 nike

我正在开发一个在客户端和服务器之间使用 TCP 通信的 C++ 程序。在程序的某个时刻,有一个循环,其中服务器向客户端发送一个大小为 x 的序列化对象 object1,然后是一个大小为 y 的序列化对象 object2。客户端有一个循环,其中包含两个连续的 recv() 调用来接收这些对象。

问题是有时客户端中的第一个 recv() 接收大小为 (x+y) 的对象,即服务器在客户端甚至开始等待对象 1 之前发送这两个对象。如何预防?

最佳答案

所描述的问题是 TCP 流特性的影响。这意味着 TCP 协议(protocol)不关心消息边界。所以你需要添加它们。

一种可能的解决方案是在通过连接发送的任何对象之前添加 header 。例如:

x <object1> y <object2>

其中 x 和 y 是 32 位数字。当您从连接中读取数据时,您首先读取对象的大小,然后读取对象本身。

此解决方案比消息确认方法好得多,因为发送方不必在发送第二个对象之前等待。

还有一点你可能想知道:在网络协议(protocol)中你需要关心整数的字节顺序。详情可以看here .

关于c++ - socket发送信息的时机(TCP、C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com