2010-06-10 243 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()放到一個循環中,一旦你讀取了足夠的數據就退出。如果只收到部分數據,您應該繼續讀取,直到您收到足夠的數據包爲止。