我有这段代码来读取从服务器发送到最近更新的客户端的数组,问题是有时它可以工作,有时它不会。它会正确打印出版本,但其他所有内容都不会打印出来,所有内容都打印在同一行上,或者在同一行上有2行。
这样做的目的是从服务器接收最近更新的String [],该更新循环并作为单个String发送。然后,这些更新将显示在GUI上。
private Response update() {
try {
Socket socket = new Socket(RS2Client.IP, 55555);
byte[] bytes = new byte[1024];
socket.getInputStream().read(bytes);
String version = new String(bytes);
System.err.println("VERSION READ " + version);
for (int i = 0; i < 6; i++) {
byte[] b = new byte[1024];
socket.getInputStream().read(b);
String text = new String(b);
getRecentUpdates().add(text.trim());
System.out.println("New update: " + text);
}
for (String update : getRecentUpdates()) {
System.err.println(update);
}
System.out.println("Client connected! Version: " + version);
socket.close();
if (Double.parseDouble(version) != RS2Client.CLIENT_VERSION) {
return Response.BAD;
}
} catch (Exception e) {
e.printStackTrace();
return Response.ERROR;
}
return Response.GOOD;
}
答案 0 :(得分:0)
套接字发送字节流。它不会跟踪您发送的每个字节数组的结尾。
如果要发送字节数组,首先应该发送长度,这样就可以知道要预期的字节数。