我正在用Java编写一个简单的TCP服务器,它正在侦听某个端口上的某些URL。某些客户端(不是Java)向服务器发送JSON消息,类似于{'message':'hello world!', 'test':555}
。我接受该消息尝试获取JSON(我正在考虑使用GSON库)。
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
但是如何从输入流中获取消息?我尝试使用ObjectInputStream
,但据我所知,它等待序列化数据而JSON没有序列化。
答案 0 :(得分:7)
用BufferedReader
换行并开始从中读取数据:
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String content = br.readLine();
System.out.println(content);
然后使用像Gson或Jackson这样的库解析你的JSON字符串。
答案 1 :(得分:1)
StringBuffer buffer = new StringBuffer();
int ch;
boolean run = true;
try {
while(run) {
ch = reader.read();
if(ch == -1) { break; }
buffer.append((char) ch);
if(isJSONValid(buffer.toString())){ run = false;}
}
} catch (SocketTimeoutException e) {
//handle exception
}
private boolean isJSONValid(String test) {
try {
new JSONObject(test);
} catch (JSONException ex) {
try {
new JSONArray(test);
} catch (JSONException ex1) {
return false;
}
}
return true;
}