完整代码
服务器端:
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();
}
}
}
客户端控制台输入及输出
服务端控制台输出:
你提的问题 这点代码看不出来,给你提一下另一个问题;
不知道你这个方法是有特殊需求还是怎样,这样重复调用一般来说都是有问题的
br是什么,代码能给全么,数据是怎么输入的
说明你的run方法根本没执行呗。加个断点调试,或者进入run先print一下,不要靠猜。
此外,你的run方法定义在哪个类里面了,你怎么确定它会执行的?