簡體   English   中英

從socket讀取json字符串

[英]Reading json string from socket

我有java服務器,我正在編寫服務器從客戶端讀取命令,

用C#編寫的客戶端以json字符串的形式通過socket發送命令。 該命令看起來像這樣

{
 "command": "blah",
 "key1": "value1",
 "key2": "value3",
 "key3": "value4",
}

json字符串每次都可以有不同數量的key-val對,因此沒有靜態計數來測量json命令中的行數。

以下是C#客戶端如何將json字符串發送到java服務器

        String json = JsonConvert.SerializeObject(map, Formatting.Indented);            
        streamWriter.WriteLine(json);
        streamWriter.Flush();

我想在用android編寫的java代碼中讀取json。 它看起來像下面所示, 它正確地讀取json行但是在讀完json命令的最后一行后它會阻塞我不知道什么是知道該命令已經結束的正確方法。

        serverSocket = new ServerSocket(4444);   
        clientSocket = serverSocket.accept();
        InputStream inStream = clientSocket.getInputStream();           
        InputStreamReader inStreamReader = new InputStreamReader(inStream);          
        BufferedReader buffReader = new BufferedReader(inStreamReader );    

        String input = "";                        

        while((input = buffReader.readLine())!= null)
        {
            command += input;                     
        }

             //Does not get to this point, blocks above on the readLine after reading full json..

        JSONObject jsObj = new JSONObject(input);
        Object ovj = jsObj.get("command");  

我知道可能是我可以在發送json之前發送行數並在while循環中多次讀取? 但這看起來像一個骯臟的解決方案,請告知什么是正確的方法。

謝謝,艾哈邁德

如果你刪除Formatting.Indented ,每個buffReader.readLine()將返回一個不同的(完整的)json。 將反序列化代碼移動到while循環中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM