Java 读取字符串数组[网络]

Java 读取字符串数组[网络],java,sockets,networking,inputstream,Java,Sockets,Networking,Inputstream,我有这段代码来读取最近更新从服务器发送到客户端的数组,问题是它有时有效,有时无效。它将正确打印版本,但其他所有内容要么不打印,要么全部打印在同一行上,要么有2个在同一行上 其目的是从服务器接收最近更新的字符串[],该字符串作为单个字符串循环发送。然后,这些更新将显示在GUI上 private Response update() { try { Socket socket = new Socket(RS2Client.IP, 55555); byte[] b

我有这段代码来读取最近更新从服务器发送到客户端的数组,问题是它有时有效,有时无效。它将正确打印版本,但其他所有内容要么不打印,要么全部打印在同一行上,要么有2个在同一行上

其目的是从服务器接收最近更新的字符串[],该字符串作为单个字符串循环发送。然后,这些更新将显示在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;
}
私有响应更新(){
试一试{
插座=新插座(RS2Client.IP,55555);
字节[]字节=新字节[1024];
socket.getInputStream().read(字节);
字符串版本=新字符串(字节);
System.err.println(“版本读取”+版本);
对于(int i=0;i<6;i++){
字节[]b=新字节[1024];
socket.getInputStream().read(b);
字符串文本=新字符串(b);
getRecentUpdates().add(text.trim());
System.out.println(“新更新:+文本”);
}
对于(字符串更新:getRecentUpdates()){
系统错误打印项次(更新);
}
System.out.println(“客户端已连接!版本:+版本”);
socket.close();
if(Double.parseDouble(版本)!=RS2Client.CLIENT\u版本){
返回响应。错误;
}
}捕获(例外e){
e、 printStackTrace();
返回Response.ERROR;
}
回复良好;
}

套接字发送字节流。它不会跟踪您发送的每个字节数组的结尾

如果要发送字节数组,应首先发送长度,以便知道需要多少字节