我有来自socket的数据,它是标题和消息。 标题为5个字节,第3个和第4个是消息长度。
我正在从socket读取,有人可以建议我好的功能,它会返回我的消息。 假设我正在读取1024个字节,并且可能发生我只收回了部分数据。
答案 0 :(得分:1)
为什么要读取1024个字节?读取5个字节,必要时重复读取,直到实际 5个字节(或错误)。然后你知道消息本身有多长:所以重复读取,直到你得到消息的所有数据。 (在每个调用中,您只需要实际需要的数据,当然 - 所以如果您在读取标题时首先读取2个字节,那么在下一次调用时您需要3个字节,即标题的其余部分。)
阅读超过你知道你需要的只是要求复杂性 - 这意味着你必须记住下一次读取的数据。
答案 1 :(得分:1)
一旦您阅读了足够的数据,就应该将调用read()
/ recv()
置于您退出的循环中。如果只收到部分数据,则应继续读取,直到收到足够的数据包进行解析为止。