2012-04-05 30 views
0

我應該從服務器獲取一些XML數據說,合併數據/ IP數據包

 <?xml><a></a><?xml><a></a><?xml><a></a><?xml><a></a> 

假設數據包按以下順序接收

 <?xml><a> 
    </a><?xml><a></a><?xml> 
    <a></a> 

如何我能制定解析這種數據的邏輯嗎?

回答

2

簡而言之,您不需要擔心訂單; TCP爲您處理重組。

TCP是一種流媒體協議,每個數據包都包含一個序列號,允許網絡堆棧以正確的順序重新組合傳入的數據包。它還會自動重新發送任何在傳輸過程中丟失或損壞的數據包。但是,與UDP一次傳輸完整消息不同,TCP只是在連接關閉之前一直髮送數據,而沒有協議級別的單個消息概念。

我認爲你的問題不是關於排序,而是關於什麼時候你已經收到所有的數據。通常有兩種方法可以解決這個問題。

首先,服務器可以在發送完數據後關閉連接。客戶端發出請求,累積響應,直到連接關閉,然後將收到的所有數據傳遞給應用程序。其次,應用程序可以通過標記每個消息的結尾或在每個消息的開頭插入一個字節數來構造數據本身。接收方等待指定數量的字節到達並傳遞給應用程序。

實際上還有第三種方法,但它很容易出錯並且通常被認爲是不好的做法:客戶端可以等到它停止接收數據一段時間,假設超時指示消息結束。但是,當客戶端等待超時時,這可能會造成不必要的延遲,並且如果網絡中存在大量延遲,它也可能過早地指示消息結束。如果服務器在消息中「消失」,您應該將其視爲一種防故障功能,防止客戶端掛起,或者如果其他方法均不起作用,則可以將其作爲最後的手段。但它很有可能會間歇性地失敗,所以不要告訴任何人你從我那裏聽到了。 :-)

祝你好運!