我一直在試圖執行一些協議解碼器玩耍,但每次我碰到一個「簡單」的問題,我覺得我解決這個問題的辦法是不是最佳的,必須有一個更好的做事的方式。我正在使用C.目前我正在使用一些罐頭數據並將其作爲文件讀取,但稍後將通過TCP或UDP進行讀取。協議解析在C
這是問題所在。我目前正在工作中使用二進制協議。所有字段都是8位長。第一個字段(8位)是分組類型。所以我讀了前8位數據,並使用一個開關/情況函數來讀取數據包的其餘部分,因爲我知道它的大小/結構。然而,一些這些包都嵌套在他們的包,所以當我遇到特定數據包然後我要讀另一個8-16字節有另一臺交換機/箱,看看下一個數據包類型和和。 (幸運的是,數據包只能嵌套2或3個深度)。 只有一次我有整個數據包解碼我可以處理它交給我的狀態機處理。
我想這可能是一個更普遍的問題爲好。您需要從套接字一次讀取多少數據?越多越好?就像協議頭文件中的「相似」一樣?
因此,儘管這個協議是非常基本的,我的代碼是一大堆的開關/ case語句,而我做的從文件/插座,我覺得不是最優讀了很多。我的主要目標是儘可能快地製作這個解碼器。對於那些更有經驗的人來說,這是要走的路還是有更好的方式,我還沒有想出來呢?任何優雅的解決這個問題?
非常感謝大家回覆!所有的回覆都很有用,給了我很多新的想法,正是我期待的! – NomadAlien 2010-06-07 13:37:09