【发布时间】:2011-06-24 21:25:44
【问题描述】:
我正在构建一个库,用于维护 c++ 应用程序之间的网络连接。在一些调试过程中,我发现我从套接字获得的一些信息似乎不完整。完整的信息至关重要,因为如果我使用协议缓冲区的库对其进行解码,我需要完整的消息。
这种现象不是一成不变的。有时我从套接字中获取所有数据,有时不是。测试过程如下:启动服务器,多次启动客户端。我得到的是函数receive() 的输出,它描述了一些变量的值如何变化。其中之一是我用来存储数据的缓冲区的大小。该大小告诉我缓冲区中有多少数据。在这个特定的测试中,客户端发送两条大小为 3(字节)的消息。我希望缓冲区大小是 3 的倍数。但是,有时大小是 4!。这意味着程序读取了一条完整的消息和第二条消息的 1/3。我不明白为什么我总是收到第一条消息。否则,protobuf 将终止程序。
我认为 tcp/ip 应该注意我收到完整的消息。我的问题是我事先不知道尺寸。我希望收到完整的消息,以便我可以正确地解释它。
【问题讨论】: