2012-02-20 20 views
0

我覺得我錯過了一些基本信息,但是,我面臨的問題是我收到一個數據包,它由兩個合併的其他數據包組成。服務器API工作正常,只有當多個寫入和讀取同時發生時,纔會發生此合併。因此,問題是服務器是否通過套接字執行多次寫入,誰負責區分數據包的起始位置,結束位置和第二個數據包的起始位置?我還是CFReadStreamRead?CFReadStreamRead在讀取時如何區分數據包?

目前,我使用的是AsyncSocket,它是CFNetwork的一個包裝,但是恕我直言,這個問題與CFReadStreamRead本身有關:有時它將兩個數據包作爲一個讀取,而不是單獨讀取它們。當無法同時發生多個寫入和讀取時,我無法找到關於流程如何進行的相關示例和信息,並且是否需要明確地執行某些操作以獲取數據包,還是需要手動將這些數據包從未來的數據流中分離出來?雖然CFReadStreamRead已經這樣做,但也許我失蹤了。

回答

1

目前尚不清楚「數據包」在這裏的含義,我懷疑你使用的術語非常鬆散。數據包(即IP數據包)邊界的確定位置位於網絡層,遠低於你所談論的任何事物。

在你所說的層面上,所有的寫入都將被連接在一起。字節是字節。一個單獨的寫並不會以任何方式建議單個讀取。多次寫入可能會映射到單個讀取,反之亦然。協議規定了協議認爲是單獨的消息之間的邊界。在你描述的情況下,這意味着這是你和你的服務器之間的問題。

+0

謝謝,答案片段「多次寫入可能映射到單個讀取或反之亦然」很好地回答了我的問題:)因爲早些時候,我通過一次寫入將映射到一次讀取。將開始深入挖掘,因爲我的第一個問題是,這是正常的AsyncSocket返回一個NSData數據包,而不是兩個:http://stackoverflow.com/questions/9359391/asyncsocket-getting-merged-two-packets-instead-of-分開雙包 – Centurion 2012-02-20 17:44:37

+0

是的,AsyncSocket的行爲與此處所設計的相同。 – 2012-02-20 18:08:06

相關問題