客戶端開啓線程: import java.io.IOException; import java.net.Socket; /* * 一個客戶端與一個服務端進行聊天。 * 1:接收數據, * 2:發送數據。 * 同時進行。:線程。 一個線程負責接收數據,一個線程負責發送數據。 */ public class ChatClient { public static void main(String[] args) { try { Socket socket=new Socket("127.0.0.1", 8888); SendThread sendThread=new SendThread(socket);//實現run接口的寫法 new Thread(sendThread).start();//實現run接口的寫法 new ReveicerTread(socket).start();//繼承run的寫法第一種 //ReveicerTread t=new ReveicerTread(socket);//繼承run的寫法第二種種 //t.start(); } catch (IOException e) { e.printStackTrace(); } } } 服務端開啓線程: import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServer { public static void main(String[] args) { try { ServerSocket serverSocket=new ServerSocket(8888); Socket socket=serverSocket.accept(); SendThread sendThread=new SendThread(socket);//實現run接口的寫法 new Thread(sendThread).start();//實現run接口的寫法 new ReveicerTread(socket).start();//繼承run的寫法第一種 //ReveicerTread t=new ReveicerTread(socket);//繼承run的寫法第二種種 //t.start(); } catch (IOException e) { e.printStackTrace(); } } } 客戶端線程: import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; public class SendThread implements Runnable { //建立一個構造函數用來接收socket private Socket socket; public SendThread(Socket socket) { this.socket=socket; } OutputStream os=null; Scanner sc=new Scanner(System.in); public void run() { //1.套接字直接傳進來,不用建立 //2.得到輸出管道 //run是父類方法,不能在拋出異常,由於子類異常要小於父類異常,而修飾符則是要大於等於父類 try { os=socket.getOutputStream(); String str=null; while(true){ str=sc.next(); if("886".equals(str)){ break; } os.write(str.getBytes()); os.write("\r\n".getBytes()); } } catch (IOException e) { e.printStackTrace(); } try { os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } 服務端線程: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; public class ReveicerTread extends Thread { //建立一個構造函數用來接收socket private Socket socket; public ReveicerTread(Socket socket){ this.socket=socket; } @Override public void run() { try { InputStream is=socket.getInputStream(); String ip=socket.getInetAddress().getHostAddress(); int port=socket.getPort(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); int len=-1; String str=null; while(true){ str=br.readLine(); if(str==null||"886".equals(str)||"\r".equals(str)||socket==null){ break; } System.out.println("發送ip: "+ip+"-端口 "+port+":"+str); } } catch (IOException e) { e.printStackTrace(); } // is.close(); //br.close(); //socket.close(); } }