客户端从TCP套接字中丢失了一些行

4 java sockets tcp newline stream

ServerSocket写出以下几行:

OutputStreamWriter outstream = new OutputStreamWriter(clientSocket.getOutputStream());

BufferedWriter out = new BufferedWriter(outstream);

out.write("Hello");
out.newLine();
out.write("People");

out.flush();
Run Code Online (Sandbox Code Playgroud)

我的客户端读取它是这样的:

in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while(true){
    line = in.readLine();

    if(line == null){
        ClientDialog.gui.log.append("NULL LINE\r\n");
    } else{
        ClientDialog.gui.log.append(line+"\r\n");
    }

    if(in.readLine() == "SHUTDOWN"){
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我在套接字上写了"Hello",一个新行,然后是"People",但是当我运行我的客户端时,它只会重复打印"Hello"和null.我看不出有什么问题?


问题解决了:

我不得不添加out.newLine()后我写了"人"的插座上,我不得不这样做line == "SHUTDOWN"不是in.readLine() == "SHUTDOWN"因为in.readLine()被消耗"人物".

还建议equals()String类中使用该方法,而不是==.

谢谢!

这是为了未来的观众.

Dev*_*Dev 9

每个循环调用readLine两次.

if(in.readLine() == "SHUTDOWN"){
        break;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码会消耗您的"People"行

修改改变

if("SHUTDOWN".equals(line){
            break;
}
Run Code Online (Sandbox Code Playgroud)

你也应该在发送"人物"后发送换行符