現在我已經建立了與我的桌面服務器的Socket
連接。一般來說它工作正常,我試圖找到任何剩餘的錯誤。我無法解決的一個問題是當我發送「發送」按鈕時。有時它會將意圖分開發送的消息合併成一條消息。我很確定這是一個Android問題,而不是我的服務器的問題。這裏是一個例子(從服務器輸出控制檯):Android套接字連接合併發送
XX.XX.XX.XX: {"control":[],"commands":[]}
XX.XX.XX.XX: {"control":[],"commands":[]}
XX.XX.XX.XX: {"control":[],"commands":[]}
XX.XX.XX.XX: {"control":[],"commands":[]}{"control":[],"commands":[]}
這導致我的JSON解析器無法正常工作。我有能力通過藍牙或無線連接到我的服務器,並且我注意到,只有在使用Wifi而不是BluetoothSocket時纔會合併消息的問題。並不是說我不認爲藍牙插槽可能會有足夠的差距來組合,但是這裏的流量很少。有什麼方法可以確保我的數據包在發送時不會被合併?我瀏覽過Socket
選項,不知道要尋找什麼。下面是我如何發送一個例子,很基本的:
mmDataOut.write(buffer);
哪裏mmDataOut
只是一個DataOutputStream
和buffer
是byte[]
。
此外,我添加了asyncsocket標籤,因爲我的服務器正在使用它們,不知道這是否會影響任何東西。
我有一種感覺,這是由於TCP。我正在使用的解析器無法處理它,所以我可以在解析之前手動遍歷字符串以檢查重複的JSON消息。現在,我只會抓住錯誤而忽略解析。謝謝。 – 2012-07-12 23:46:04
你真的應該重新裝配成完整的東西。如果性能不是特別關注的話,一次讀取一個字符直到找到終止條件很容易。 – 2012-07-12 23:50:20
@Atlos:雖然解析器可能無法處理部分或組合消息(這很好),但仍然有責任將消息拆分爲解析器*可以處理的內容。如果因爲給解析器不可分析的輸入而隨機丟棄了消息,那麼您的通信將變得不可靠和片斷。 – 2012-07-12 23:50:54