我有一个简单的客户端/服务器应用程序,需要通过套接字将一些 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;
}
这里的要点有两点:
即使我为每个“绘制对象”刷新客户端上的输出通道,在服务器端我只得到一个包含所有对象的大字符串。也许在这一点上我错过了一些套接字概念......
由于我将所有对象都放在一个字符串中,因此我尝试将其解析为 Json 数组,但出现异常“com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException :使用 JsonReader.setLenient(true) 接受格式错误的 JSON”。使用调试器我检查了输入字符串,除了一个奇怪的“A”分隔我的对象外,它似乎没问题。
有什么线索吗?谢谢!