繁体   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