服务器端:
try {
ServerSocket server_socket=new ServerSocket(port_number);
Socket client_socket= server_socket.accept();
PrintWriter output = new PrintWriter(client_socket.getOutputStream(),true);
BufferedReader input = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));
String userInput, clientOutput;
while ((userInput=stdIn.readLine())!="EXIT") {
if ((clientOutput=input.readLine())!=null) {
System.out.println("Client: "+clientOutput);
} if (userInput!=null) {
output.println(userInput);
output.flush();
}
}
}
客户端:
try {
Socket client_socket= new Socket(hostname,port_number);
PrintWriter output = new PrintWriter(client_socket.getOutputStream(),true);
BufferedReader input = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));
String userInput,serverOutput;
while ((userInput=stdIn.readLine())!="EXIT") {
if ((serverOutput=input.readLine())!=null) {
System.out.println("Server: "+serverOutput);
} if (userInput!=null) {
output.println(userInput);
output.flush();
}
}
}
我的案例中的代码对我有意义,我似乎无法弄清楚为什么还需要按下一个输入,它是否与.readLine()
有关?
我查看了以下帖子Server Client in Java only displays message when I press enter,但是提供的解决方案无法解决问题。
注意:最初在while循环中没有if语句。我认为这是一个问题的方式是while循环可能卡在其中一行,等待用户/服务器输入。因此,实现if语句允许它跳过等待部分并重新运行循环。
答案 0 :(得分:1)
原来我混淆了我的变量。 while循环应该是:
while ((userInput=input.readLine())!="EXIT") {
它修复了它,但还存在一些其他问题
答案 1 :(得分:0)
是否与.getLine()?
有关
是。如果查看Javadoc for BufferedReader#readLine(),它会清楚地指出行尾字符终止要读取的字符串:
读取一行文字。一条线被认为是换行(' \ n'),回车(' \ r')或回车后紧接着换行符中的任何一条终止