通过Java中的套接字传递JSON对象数组

时间:2013-11-14 13:50:28

标签: java json sockets

我有一个简单的客户端/服务器应用程序需要通过套接字将一些JSON对象(在运行时生成)发送到服务器。

在我的客户端上(用于测试目的): drawList是Draw对象列表(包含4个元素)。

Socket client = new Socket(serverName, serverPort);
Gson gson = new Gson();
DataOutputStream out = new DataOutputStream(client.getOutputStream());
for (int i=0; i<drawList.size(); i++){
    out.writeUTF(gson.toJson(drawList.get(i)));
    out.flush();
}
out.close();
client.close();

在服务器端,我有:

Socket server = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
String inputLine;

while((inputLine = in.readLine()) != null){             
    List<Draw> drawList = DrawUtils.getDrawList(inputLine);             
    for (Draw draw : drawList){
        processDraw(draw);
    }
}

遵循getDrawList方法

public static List<Draw> getDrawList(String input){
    List<Draw> drawList = new ArrayList<Draw>();
    Gson gson = new Gson();
    JsonParser jParser =  new JsonParser();
    JsonArray jArray = jParser.parse(input).getAsJsonArray();

    for (JsonElement obj : jArray){
        drawList.add(gson.fromJson(obj, Draw.class));
    }
    return drawList;
}

这里有两点:

  1. 即使我在客户端为每个“Draw对象”刷新输出通道,在服务器端我只得到一个包含所有对象的大字符串。也许在这一点上我错过了一些插座概念......

  2. 由于我将所有对象都放在一个字符串中,我正在尝试将其解析为Json数组,但我得到一个例外“com.google.gson.JsonSyntaxException:com.google .gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)接受格式错误的JSON“。使用调试器我检查了输入字符串,除了一个奇怪的“A”分隔我的对象外似乎没问题。

  3. 任何线索? 谢谢!

1 个答案:

答案 0 :(得分:2)

根本不使用writeUTF(),或实际上DataOutputStream。 writeUTF()将字符串的长度写在文本值的前面(&#39; A&#39;你注意到),因此它不适合发送一般的文本数据(即{ {1}}只能与writeUTF()一起使用,反之亦然。

改为使用readUTF()