从socket读取json字符串

时间:2012-11-02 09:56:57

标签: c# java sockets

我有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循环中多次读取?但这看起来像一个肮脏的解决方案,请告知正确的方法。

谢谢, 艾哈迈德

1 个答案:

答案 0 :(得分:1)

如果您删除Formatting.Indented,则每个buffReader.readLine()都会返回一个不同的(完整的)json。将反序列化代码移动到while循环中。