public static void main(String[] args){
// 需要一个集合 来存储服务器收到的各个客户的Socket
List<Socket> sockets = new Vector<Socket>();
Socket socket = null;
ServerSocket ss = null;
try {
ss = new ServerSocket(10101);
System.out.println("服务器启动...");
while(true){
socket = ss.accept();
// 将接受到的Socket存入集合中
sockets.add(socket);
// 接收到一个新的客户端连接
// 要读取socket中的信息
//启动线程
ServerThread st = new ServerThread(sockets, socket);
Thread server = new Thread(st);
server.start();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
socket.close();
ss.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class ServerThread implements Runnable{
// 服务器线程中 需要组合 对象
List<Socket> sockets;
// 获取所有的客户端
Socket socket;
// 通过有参构造器 注入的形式 将socket集合和当前的socket传入线程
public ServerThread(List<Socket> sockets,Socket socket) {
super();
this.sockets = sockets;
this.socket = socket;
}
@Override
public void run() {
BufferedReader br = null;
try {
// 获取客户端地址
String hostIp = socket.getInetAddress().getHostAddress();
// 首先读取建立连接后 传过来的socket中的信息
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(isr);
while(true){
String clientMsg = br.readLine();
System.out.println("客户端:"+hostIp+"说:"+clientMsg);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}