3

我有 java 服务器,我正在编写服务器从客户端读取命令,

用 C# 编写的客户端通过套接字以 json 字符串的形式发送命令。命令看起来像这样

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

谢谢,艾哈迈德

4

1 回答 1

1

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

于 2012-11-02T10:20:57.730 回答