求解,为什么run方法不会结束?
如果while是死循环的话,应该会持续打印循环的内容,但是也没有。
run方法执行完毕不应该退出吗?但是run over一次都没有打印过。
完整代码
服务器端:
public class Test04TalkRoomServer {
public static List<Socket> slist = Collections.synchronizedList(new ArrayList<>());
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10099);
while (true) {
Socket accept = ss.accept();
slist.add(accept);
new Thread(new ServerThread(accept)).start();
}
}
}
public class ServerThread implements Runnable {
Socket s = null;
BufferedReader br = null;
public ServerThread(Socket s) throws IOException {
this.s = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
}
@Override
public void run() {
try {
String conect = null;
while ((conect = readFromClient()) != null) {
System.out.println("进入循环");
System.out.println(conect);
for (Socket s : Test04TalkRoomServer.slist) {
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println(Thread.currentThread().getName()+" "+conect);
}
System.out.println("循环结束");
}
System.out.println("===========");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("run over");
}
private String readFromClient() throws IOException {
try {
return br.readLine();
} catch (IOException e) {
Test04TalkRoomServer.slist.remove(s);
}
return null;
}
}
客户端端
public class Test02TalkRoomClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 10099);
new Thread(new ClientThread(socket)).start();
PrintStream pr = new PrintStream(socket.getOutputStream());
String line = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((line = br.readLine()) != null){
pr.println(line);
}
}
}
public class ClientThread implements Runnable{
private Socket socket;
BufferedReader br = null;
public ClientThread(Socket socket) throws IOException {
this.socket = socket;
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
@Override
public void run() {
try {
String connect = null;
while ((connect = br.readLine()) != null){
System.out.println(connect);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端控制台输入及输出
服务端控制台输出: