2011-01-28 69 views
1

我試圖從服務器接收數據並解析它。C winsock「滾動分析」

http://pastebin.com/1kjXnXwq http://pastebin.com/XpGSgRBh

一切,是利國利民的,但我想分析數據,而不是僅僅抓住它的模塊和打印出來。那麼是否有辦法從winsock獲取數據直到\ n然後停止並將其傳遞給另一個函數進行解析,並且一旦該函數返回從最後一點繼續讀取,直到另一個\ n出現並重復該過程,直到出現沒有什麼可以接收?

應該這樣做的功能稱爲msgLoop(),位於第二個pastebin行。

回答

3

要從插槽讀取\n封端的字符串,你必須要麼:讀取

  1. 一次插入1個字節,直到遇到\n字節。任何未讀的字節都會留在套接字中,直到您稍後再讀取它們。這不是非常有效,但它有效。

  2. 創建數據緩存。當你需要一個新的字符串時,首先檢查緩存,看看是否已經存在一個\n字節。如果沒有,則繼續以更大的塊讀取套接字並將它們存儲到緩存中,直到遇到\n字節。然後將緩存的內容處理到第一個字節\n,移除您處理的字節,並將剩餘字節移到緩存的前面以供稍後讀取。