gpt4 book ai didi

tcp - tcp/ip 是否传送完整的消息?

转载 作者:可可西里 更新时间:2023-11-01 02:34:52 24 4
gpt4 key购买 nike

我正在构建一个库,用于在 C++ 中维护应用程序之间的网络连接。在一些调试过程中,我发现我从 socket 获得的一些信息似乎不完整。此信息的完整性至关重要,因为如果我使用 Protocol Buffer 的库对其进行解码,我需要完整的消息。

这种现象并不是一成不变的。有时我从套接字获取所有数据,有时不是。测试过程如下:启动服务器,多次启动客户端。我得到的是函数 receive() 的输出,它描述了一些变量的值是如何变化的。其中之一是我用来存储数据的缓冲区的大小。该大小告诉我缓冲区中有多少数据。客户端发送两条消息,每条消息的大小为 3(字节)——在此特定测试中。我希望缓冲区大小是 3 的倍数。但是,有时大小是 4!。这意味着程序读取一条完整的消息和第二条消息的 1/3。我不明白为什么我总是能完成第一条消息。否则,protobuf 将终止程序。

我认为 tcp/ip 应该注意我得到完整的消息。我的问题是我事先不知道尺寸。我希望收到完整的消息,以便我可以正确地解释它。

最佳答案

TCP 是基于流的协议(protocol),而不是基于消息的协议(protocol)。 TCP 不知道您的消息何时开始或结束,因此无法保证您会在一次调用中获得完整的消息。也不能保证您只会收到一条完整的消息。您必须缓冲接收到的数据,并自己将其拆分为消息。如果您没有收到完整的消息,请存储您收到的数据,并等待其余的到达。

关于tcp - tcp/ip 是否传送完整的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473929/

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