2016-01-21 41 views
0

我想通過c#(xamarin)中的套接字連接來回發送JSON字符串。如何從套接字接收JSON字符串

我想知道,接收器如何知道從套接字讀取多少字節以接收完整的JSON字符串,因爲字符串的大小會有所不同。

我必須先發送一個二進制長度(可能是一個或兩個字節),然後JSON字符串?這樣做的標準方法是什麼,以便接收者知道每次獲取完整的JSON字符串時要從套接字讀取多少個字節。

它必須知道每個字符串有多少個字節,因爲每個字符串都是一個單獨的數據包,並且如果有很多數據包是背靠背發送的,如果每個字符串的長度都不準確,它會讀取超過一個字符串和另一個的開始,或者不讀取整個字符串,無論哪種方式,它將在解碼格式錯誤的字符串時崩潰。

另一個問題是,如果我首先發送二進制的長度,那麼如果發生什麼事情發生在接收器與發送者不同步的地方,那麼它不會知道哪個字節是長度了,因爲它不能告訴字符串的起始位置,並且哪些輸入數據代表長度,它將只收到一堆字節,並且它不會知道從哪裏開始的末端等。

任何人都知道正確的方法來執行它,而無需編寫兆字節的代碼?

感謝

回答

0

如果它是一個基於字符串的消息(如你所提到的JSON),你可以使用一個StringBuilderCONCAT你收到的每個數據包,並在每個檢查收到的文件結束標籤的步驟(由您自己定義,例如<EOF>)。

這裏是關於MSDN

ClientServer實現的示例:客戶端發送與<EOF>標籤和服務器檢查結束消息它,以確保完成的每個消息。