在java中获取Inputstream的结尾

Vib*_*nRC 3 java sockets

以下是我的客户端代码,它从服务器检索文本并打印.

Socket socket = new Socket(ip, port);
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();
        String string = "Hello!\n";
        byte buffer[] = string.getBytes();
        out.write(buffer);


    while ((character = in.read()) != -1){
            System.out.print((char) character);
        }
Run Code Online (Sandbox Code Playgroud)

我从服务器获取正确的值,但它一次又一次地发生,我怎样才能找到发送值的长度.

esa*_*saj 5

-1表示流的结束,并在连接关闭时接收.如果你想保持连接打开并发送多条消息,你需要某种协议(类似于两端之间的协议)来告诉消息的结束位置.有很多方法可以做到这一点,但在你的例子中,你正在写一个行终止符(\n)到消息的末尾,所以你可以在另一端检查它.另一种方法是在实际消息内容之前写入要发送的字节数.