一、Socket編程
在網絡編程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相關的技術。
二、案例
1.服務端
- ① 創建ServerSocket對象,綁定監聽端口
- ② 通過accept()方法監聽客戶端請求
- ③ 連接建立后,通過輸入流讀取客戶端發送的請求信息
- ④ 通過輸出流向客戶端發送相應信息
- ⑤ 關閉相關資源
1 package cn.kgc.sockettest.demo1; 2 3 import java.io.*; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 7 /** 8 * 服務端 9 * 10 * @author 11 * @create 2019-07-23 14:16 12 **/ 13 public class server { 14 public static void main(String[] args) { 15 try { 16 ServerSocket serverSocket = new ServerSocket(8080); 17 System.out.println("服務器啟動完成...監聽啟動!"); 18 //開啟監聽,等待客戶端的訪問 19 Socket socket = serverSocket.accept(); 20 // 獲取輸入流,因為是客戶端向服務器端發送了數據 21 InputStream inputStream = socket.getInputStream(); 22 // 創建一個緩沖流 23 BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); 24 String info = null; 25 while ((info = br.readLine())!=null){ 26 System.out.println("這里是服務端 客戶端是:"+info); 27 } 28 //向客戶端做出響應 29 OutputStream outputStream = socket.getOutputStream(); 30 info = "這里是服務器端,我們接受到了你的請求信息,正在處理...處理完成!"; 31 outputStream.write(info.getBytes()); 32 outputStream.close(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 }
2.客戶端
- ① 創建Socket對象,指明需要連接的服務器的地址和端口號
- ② 連接建立后,通過輸出流想服務器端發送請求信息
- ③ 通過輸入流獲取服務器響應的信息
- ④ 關閉響應資源
package cn.kgc.sockettest.demo1; import java.io.*; import java.net.Socket; /** * 客戶端 * * @author * @create 2019-07-23 14:17 **/ public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost",8080); OutputStream outputStream = socket.getOutputStream(); String info = "你好啊!"; //輸出! outputStream.write(info.getBytes()); socket.shutdownOutput(); //接收服務器端的響應 InputStream inputStream = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); while ((info = br.readLine())!=null){ System.out.println("接收到了服務端的響應!" + info); } //刷新緩沖區 outputStream.flush(); outputStream.close(); inputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
然后,先執行服務端,再執行客戶端的代碼就可以了。這只是個小案例,有什么不足之處,請各位指教!
