从套接字读取

时间:2010-06-10 16:06:51

标签: c++ data-structures tcp

我有来自socket的数据,它是标题和消息。 标题为5个字节,第3个和第4个是消息长度。

我正在从socket读取,有人可以建议我好的功能,它会返回我的消息。 假设我正在读取1024个字节,并且可能发生我只收回了部分数据。

2 个答案:

答案 0 :(得分:1)

为什么要读取1024个字节?读取5个字节,必要时重复读取,直到实际 5个字节(或错误)。然后你知道消息本身有多长:所以重复读取,直到你得到消息的所有数据。 (在每个调用中,您只需要实际需要的数据,当然 - 所以如果您在读取标题时首先读取2个字节,那么在下一次调用时您需要3个字节,即标题的其余部分。)

阅读超过你知道你需要的只是要求复杂性 - 这意味着你必须记住下一次读取的数据。

答案 1 :(得分:1)

一旦您阅读了足够的数据,就应该将调用read() / recv()置于您退出的循环中。如果只收到部分数据,则应继续读取,直到收到足够的数据包进行解析为止。

相关问题