package com.test.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 服务器端 * 一个服务器和多个客户端进行通信 线程池 * @author Administrator * */ public class NewServer { Socket socket; /**线程池**/ ExecutorService executors; public NewServer() throws Exception{ /**服务器绑定端口**/ ServerSocket server = new ServerSocket(8080); /**建立线程池**/ executors = Executors.newCachedThreadPool(); /**时刻等待客户端发出请求**/ while(true){ socket = server.accept(); //把用户每一次请求放入到线程池中 executors.execute(new ServerThread(socket)); } } class ServerThread extends Thread{ Socket socket; BufferedReader in; PrintWriter out; public ServerThread(Socket socket) throws IOException { this.socket=socket; /**用于读取客户端发来的信息**/ in =new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream()); } @Override public void run() { try { while(true){ String message = in.readLine(); out.println("hasreceive"+socket.getLocalPort()+"的消息"); out.flush(); System.out.println(socket.getLocalPort()+"==="+message); if(message.equals("bye")){ break; } } out.close(); in.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) throws Exception { new NewServer(); } } package com.test.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 客户端 * 一个服务器和多个客户端进行通信 线程池 * @author Administrator * */ public class Clients { Socket server; ExecutorService ex; public Clients() throws UnknownHostException, IOException { server = new Socket("127.0.0.1",8080); ex = Executors.newCachedThreadPool(); ex.execute(new ClientThread(server)); } class ClientThread extends Thread{ Socket socket; BufferedReader in; PrintWriter out; InputStreamReader keybox = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(keybox); public ClientThread(Socket socket) throws IOException { this.socket = socket; /**用于读取客户端返回的信息**/ in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream()); } @Override public void run() { try { while(true){ String str = br.readLine(); out.println(str); out.flush(); System.out.println("服务器响应"+in.readLine()); if(str.equals("bye")){ break; } } in.close(); out.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) throws UnknownHostException, IOException { new Clients(); } } //用dos窗口 启动服务器端 开多个 客户端进行交互 便可