所以,现在,我唯一能做的就是,在连接时,pw.printin("Hi")
。现在客户端的接收端可以回复“Hello”,如果是,我想用“Hi”回答,然后再次回复“Hello”,在无限循环中只在另一个中断言。
try {
ServerSocket serverSocket = new ServerSocket(90);
while(true) {
String str= "Hello";
Socket socket = serverSocket.accept();
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw.println("Hi");
if(br.readLine().equals(str)){
pw.println("Hi");
}
System.out.println(str);
}
} catch (IOException e) {
try {
if(serverSocket!= null){
serverSocket.close();
}
}
catch (IOException e1){
e1.printStackTrace(System.err);
}
}
return 500;
}
}
答案 0 :(得分:0)
你的问题是,没有实际的循环可以反复向客户端说hi
,你必须这样做。 Socket socket = serverSocket.accept();
部分用于处理一个客户端,因此while(true)
循环只是使服务器保持活动状态,以便多个客户端进行连接。因此,您必须使内部循环(最好是更严重的情况下客户端的其他线程/线程池)来构建每个客户端逻辑。
这种循环的样本:
try {
String str = "Hello";
String endingStr = "Bye";
while (true) {
Socket socket = serverSocket.accept();
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw.println("Hi");
while ((input = br.readLine()) != null) { //Here is the loop part
input = input.replaceAll("[^A-Za-z0-9]", "");
if(input.equals(endingStr)){
break;
}
if (input.equals(str)) {
pw.println("Hi");
}
}
socket.close();
}
} catch (IOException ex) {
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e1) {
e1.printStackTrace(System.err);
}
}
编辑:根据 EJP
的建议更改代码以防止NPE