1、搭建服務器端java
a)、建立ServerSocket對象綁定監聽端口。服務器
b)、經過accept()方法監聽客戶端的請求。socket
c)、創建鏈接後,經過輸入輸出流讀取客戶端發送的請求信息。spa
d)、經過輸出流向客戶端發送請求信息。.net
e)、關閉相關資源。3d
1 package 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.ServerSocket; 8 import java.net.Socket; 9 10 public class SocketService { 11 //搭建服務器端 12 public static void main(String[] args) throws IOException{ 13 SocketService socketService = new SocketService(); 14 //一、a)建立一個服務器端Socket,即SocketService 15 socketService.oneServer(); 16 } 17 public void oneServer(){ 18 try{ 19 ServerSocket server=null; 20 try{ 21 server=new ServerSocket(5209); 22 //b)指定綁定的端口,並監聽此端口。 23 System.out.println("服務器啓動成功"); 24 //建立一個ServerSocket在端口5209監聽客戶請求 25 }catch(Exception e) { 26 System.out.println("沒有啓動監聽:"+e); 27 //出錯,打印出錯信息 28 } 29 Socket socket=null; 30 try{ 31 socket=server.accept(); 32 //二、調用accept()方法開始監聽,等待客戶端的鏈接 33 //使用accept()阻塞等待客戶請求,有客戶 34 //請求到來則產生一個Socket對象,並繼續執行 35 }catch(Exception e) { 36 System.out.println("Error."+e); 37 //出錯,打印出錯信息 38 } 39 //三、獲取輸入流,並讀取客戶端信息 40 String line; 41 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); 42 //由Socket對象獲得輸入流,並構造相應的BufferedReader對象 43 PrintWriter writer=new PrintWriter(socket.getOutputStream()); 44 //由Socket對象獲得輸出流,並構造PrintWriter對象 45 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 46 //由系統標準輸入設備構造BufferedReader對象 47 System.out.println("Client:"+in.readLine()); 48 //在標準輸出上打印從客戶端讀入的字符串 49 line=br.readLine(); 50 //從標準輸入讀入一字符串 51 //四、獲取輸出流,響應客戶端的請求 52 while(!line.equals("end")){ 53 //若是該字符串爲 "bye",則中止循環 54 writer.println(line); 55 //向客戶端輸出該字符串 56 writer.flush(); 57 //刷新輸出流,使Client立刻收到該字符串 58 System.out.println("Server:"+line); 59 //在系統標準輸出上打印讀入的字符串 60 System.out.println("Client:"+in.readLine()); 61 //從Client讀入一字符串,並打印到標準輸出上 62 line=br.readLine(); 63 //從系統標準輸入讀入一字符串 64 } //繼續循環 65 66 //五、關閉資源 67 writer.close(); //關閉Socket輸出流 68 in.close(); //關閉Socket輸入流 69 socket.close(); //關閉Socket 70 server.close(); //關閉ServerSocket 71 }catch(Exception e) {//出錯,打印出錯信息 72 System.out.println("Error."+e); 73 } 74 } 75 }
2、搭建客戶器端code
a)、建立Socket對象,指明須要鏈接的服務器的地址和端口。server
b)、創建鏈接後,經過輸出流向服務器發送請求信息。對象
c)、經過輸入流獲取服務器的響應信息。blog
d)、關閉響應資源
1 package socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.PrintWriter; 8 import java.net.InetAddress; 9 import java.net.Socket; 10 import java.net.URL; 11 12 public class SocketClient { 13 // 搭建客戶端 14 public static void main(String[] args) throws IOException { 15 try { 45 // 一、建立客戶端Socket,指定服務器地址和端口 46 // Socket socket=new Socket("127.0.0.1",5200); 47 Socket socket = new Socket("192.168.1.115", 5209); 48 System.out.println("客戶端啓動成功"); 49 // 二、獲取輸出流,向服務器端發送信息 50 // 向本機的52000端口發出客戶請求 51 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 52 // 由系統標準輸入設備構造BufferedReader對象 53 PrintWriter write = new PrintWriter(socket.getOutputStream()); 54 // 由Socket對象獲得輸出流,並構造PrintWriter對象 55 //三、獲取輸入流,並讀取服務器端的響應信息 56 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 57 // 由Socket對象獲得輸入流,並構造相應的BufferedReader對象 58 String readline; 59 readline = br.readLine(); // 從系統標準輸入讀入一字符串 60 while (!readline.equals("end")) { 61 // 若從標準輸入讀入的字符串爲 "end"則中止循環 62 write.println(readline); 63 // 將從系統標準輸入讀入的字符串輸出到Server 64 write.flush(); 65 // 刷新輸出流,使Server立刻收到該字符串 66 System.out.println("Client:" + readline); 67 // 在系統標準輸出上打印讀入的字符串 68 System.out.println("Server:" + in.readLine()); 69 // 從Server讀入一字符串,並打印到標準輸出上 70 readline = br.readLine(); // 從系統標準輸入讀入一字符串 71 } // 繼續循環 72 //四、關閉資源 73 write.close(); // 關閉Socket輸出流 74 in.close(); // 關閉Socket輸入流 75 socket.close(); // 關閉Socket 76 } catch (Exception e) { 77 System.out.println("can not listen to:" + e);// 出錯,打印出錯信息 78 } 79 } 80 81 }
這是咱們先啓動服務器端,再啓動客戶端(順序不能亂)