1 package com.neusoft.edu.socket; 2 import java.io.BufferedReader; 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.PrintWriter; 6 import java.net.ServerSocket; 7 import java.net.Socket; 8 /** 9 * 服務器端代碼 10 * 獲取客戶端發送的信息,顯示並且返回對應的回復 11 * 1、創建ServerSocket對象 12 * 2、調用accept方法獲取客戶端連接 13 * 3、使用輸入流讀取客戶端發送的數據 14 * 4、使用輸出流向客戶端寫入數據 15 * 5、關閉對應的對象 16 * @author L 17 * 18 */ 19 public class ChatServer { 20 /** 21 * @param args 22 */ 23 public static void main(String[] args) { 24 try { 25 //1、創建ServerSocket對象,8875為自定義端口號 26 ServerSocket server = new ServerSocket(8857); 27 28 //簡單提示 29 System.out.println("等待客戶端連接……"); 30 31 //2、獲取客戶端連接 32 Socket client = server.accept(); 33 34 //獲取客戶端的相關信息 35 System.out.println(client.getInetAddress().getHostAddress() + "連接上來了……"); 36 37 //3.1、定義輸入流和輸出流對象 38 BufferedReader in = new BufferedReader( 39 new InputStreamReader( 40 client.getInputStream())); 41 42 //用來獲取從控制台輸入的數據,將該數據發送給客戶端 43 BufferedReader inByServer = new BufferedReader( 44 new InputStreamReader(System.in)); 45 46 PrintWriter out = new PrintWriter(client.getOutputStream(), true); 47 48 //讀取到的數據 49 String data = null; 50 String answer = null; 51 52 //循環和客戶端進行通信 53 do 54 { 55 //3.2、讀取客戶端發送的數據 56 data = in.readLine(); 57 58 //在服務器端顯示讀取到的數據 59 System.out.println("客戶端發送信息:" + data); 60 61 //獲取服務器端要發送給客戶端的信息 62 System.out.print("服務器端回復客戶端:"); 63 answer = inByServer.readLine(); 64 65 //3.3、將數據寫入到客戶端 66 out.println(answer); 67 out.flush(); 68 }while(!"bye".equals(data)); 69 70 //4、關閉相關資源 71 out.flush(); 72 in.close(); 73 inByServer.close(); 74 out.close(); 75 76 //關閉Socket對象 77 client.close(); 78 server.close(); 79 80 System.out.println("服務器端關閉……"); 81 } catch (IOException e) { 82 // TODO Auto-generated catch block 83 e.printStackTrace(); 84 } 85 } 86 }
1 package com.neusoft.edu.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.Socket; 8 import java.net.UnknownHostException; 9 10 /** 11 * 聊天客戶端 12 * 1、創建Socket對象 13 * 2、寫入數據 14 * 3、讀取從服務器端發來的數據 15 * 4、關閉 16 * @author L 17 * 18 */ 19 public class ChatClient { 20 21 /** 22 * @param args 23 */ 24 public static void main(String[] args) { 25 try { 26 //1、創建Socket對象,("192.168.1.107", 8857)分別為主機IP和端口號,兩個類端口號要一致 27 Socket client = new Socket("192.168.1.107", 8857); 28 29 //2.1、創建輸入流和輸出流對象 30 BufferedReader in = new BufferedReader( 31 new InputStreamReader( 32 client.getInputStream())); 33 34 PrintWriter out = new PrintWriter(client.getOutputStream(), true); 35 36 BufferedReader inByClient = new BufferedReader( 37 new InputStreamReader(System.in)); 38 39 //服務器端發送的數據 40 String data = null; 41 //客戶端向服務器端寫入的數據 42 String answer = null; 43 44 do 45 { 46 //2.2、客戶端的讀寫操作 47 System.out.print("你說:"); 48 //獲取要發送給服務器端的數據 49 answer = inByClient.readLine(); 50 //向服務器端寫入數據 51 out.println(answer); 52 out.flush(); 53 54 //獲取服務器端發送的數據 55 data = in.readLine(); 56 //輸出從服務器端獲取的數據 57 System.out.println("服務器端返回信息是:" + data); 58 }while(!"bye".equals(data)); 59 60 //3、關閉 61 in.close(); 62 out.close(); 63 inByClient.close(); 64 client.close(); 65 66 System.out.println("客戶端關閉……"); 67 } catch (UnknownHostException e) { 68 // TODO Auto-generated catch block 69 e.printStackTrace(); 70 } catch (IOException e) { 71 // TODO Auto-generated catch block 72 e.printStackTrace(); 73 } 74 } 75 76 }
這是個小程序,不過也包含了一些小BUG,僅供新手參考,不妥之處,還望見諒!