2010-06-10 197 views
0

我有来自套接字的数据,它是标头和消息。 5个字节的头部,3和4个是消息长度。从套接字读取

我正在阅读套接字,有人可能会建议我好功能,它会返回我的味精。 假设我正在读取1024个字节,并且可能发生我只收回了部分数据。

回答

1

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

阅读比你知道的更多的东西只是要求复杂性 - 这意味着你必须记住下一次阅读的数据。

+0

你可以在C中建议代码,首先我会读取前5个字节,即标题,采取味精长度,并阅读让我的味精。现在我再次读取5个字节的读取头文件,并再次msg,是你建议 – user363638 2010-06-10 16:17:49

+0

@ user363638:我不会为你写代码(这是一段时间,因为我已经完成了C,我不得不看看一切) - 哪一点建议你觉得很难?你知道如何从套接字读取吗?你知道如何使用返回值吗?你知道如何将标题转换为消息长度吗? – 2010-06-10 16:31:30

1

你应该把呼叫read()/recv()放到一个循环中,一旦你读取了足够的数据就退出。如果只收到部分数据,您应该继续读取,直到您收到足够的数据包为止。