Java ServerSocket/Server 只工作一次



所以我想用Java设置一个非常基本的聊天应用程序。所以我写了一个服务器和一个客户端。

服务器:

port = 9694;
server = new ServerSocket(port);
client = server.accept();
optStream = client.getOutputStream();
optWriter = new PrintWriter(optStream);
iptStream = client.getInputStream();
iptReader = new BufferedReader(new InputStreamReader(iptStream));
while(terminateServer == false){
String s = null;
if((s = iptReader.readLine()) != null){
optWriter.write(s + "n");
optWriter.flush();
}
}
optWriter.close();
iptReader.close();

客户:

client = new Socket("192.168.0.100", 9694);
sc = new Scanner(System.in);
optStream = client.getOutputStream();
optWriter = new PrintWriter(optStream);
iptStream = client.getInputStream();
iptReader = new BufferedReader(new InputStreamReader(iptStream));
while(terminateClient == false){
this.send(getMessage());
this.receive();
}

optWriter.close();
iptReader.close();
}
public void send(String text){
String s = null;
s = text;
optWriter.write(s + "n");
optWriter.flush();
}
public void receive(){
String a = null;
try {
while((a=iptReader.readLine()) != null){
System.out.println(a);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getMessage(){
String s = null;
s = sc.nextLine();
return s;

}

我的计划是使用 while 循环,以便我可以重复发送消息。但出于某种原因,它只工作一次。您键入一段文本,然后服务器返回它。您可以输入另一个,但服务器不会返回它。

有人知道为什么吗?

readLine()

在流结束时返回 null,在这种情况下,仅当对等方断开连接时才会发生。因此,围绕receive()调用的while循环是完全没有意义的。一旦对等体断开连接,无论您调用多少次,readLine()都会返回 false。