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窗口 啓動服務器端 開多個 客戶端進行交互 便可