服務器羣發線程: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Iterator; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; //將服務器接收到的信息羣發送給其餘客戶端 public class OneServerMoreClientRunnable { public static void main(String[] args) { ExecutorService service=Executors.newFixedThreadPool(3); ArrayList<Socket>list=null;//list也能夠在run()中建立並添加socket看本身那個方便 try { ServerSocket serverSocket=new ServerSocket(8888); Socket socket=null; while(true){ //有一個客戶端鏈接就建立一個線程 socket=serverSocket.accept(); list=new ArrayList<>(); /* MyThread mThread=new MyThread(socket,list); //Thread t=new Thread(mThread); mThread.start();//開啓線程 */service.execute(new MyThread(socket, list));//線程池 } } catch (IOException e) { e.printStackTrace(); } } } class MyThread extends Thread{ //接收傳進來的套接字 private Socket socket; private ArrayList<Socket> list; public MyThread(Socket socket,ArrayList<Socket> list) { this.socket=socket; this.list=list; } InputStream is=null; OutputStream os=null; BufferedReader br=null; String str=null; String ip=null; int port; String str2=null; @Override public void run() { list.add(socket); try { is=socket.getInputStream(); br=new BufferedReader(new InputStreamReader(is)); ip=socket.getInetAddress().getHostAddress(); port=socket.getPort(); while(true){ str=br.readLine(); //System.out.println(str); if(str==null||"".equals(str)||socket==null){ break; } str2="ip"+ip+":端口"+port+str; //遍歷發送給其餘客戶端,第一種 Iterator<Socket>iter=list.iterator(); for(;iter.hasNext();){ socket=iter.next(); os=socket.getOutputStream(); os.write(str2.getBytes()); } /*//遍歷發送給其餘客戶端,第二種 for(Socket s:list){ os=s.getOutputStream(); os.write(str2.getBytes()); } */ } } catch (IOException e) { e.printStackTrace(); System.out.println(socket.getInetAddress().getHostAddress()+"退出"); } try { is.close(); br.close(); os.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 客戶端: import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; /* * 客戶端接收控制檯的數據,發送到服務端, * 當服務端接收到數據後,回客戶端一條信息。 */ public class ClientTcpDemo3 { public static void main(String[] args) throws Exception { Socket socket=new Socket("127.0.0.1", 8888); OutputStream os=socket.getOutputStream(); InputStream is=null; is=socket.getInputStream(); byte[]b=new byte[1024]; System.out.println("請輸入發送數據"); Scanner sc=new Scanner(System.in); while(true){ String str=sc.nextLine(); if("886".equals(str)){ break; } byte[]a=str.getBytes(); //若是接收是用緩衝流的話,有readLine()時,發送端必定要有回車換行符服務器才能接受到 os.write(a, 0, a.length); os.write("\r\n".getBytes()); int len=is.read(b); System.out.println(new String (b,0,len)); } socket.close(); os.close(); } }