簡單的java socket 示例:
一、搭建服務器端
a)、創建ServerSocket對象綁定監聽端口。
b)、通過accept()方法監聽客戶端的請求。
c)、建立連接后,通過輸入輸出流讀取客戶端發送的請求信息。
d)、通過輸出流向客戶端發送請求信息。
e)、關閉相關資源。
package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketService { //搭建服務器端 public static void main(String[] args) throws IOException{ SocketService socketService = new SocketService(); //1、a)創建一個服務器端Socket,即SocketService socketService.oneServer(); } public void oneServer(){ try{ ServerSocket server=null; try{ server=new ServerSocket(5209); //b)指定綁定的端口,並監聽此端口。 System.out.println("服務器啟動成功"); //創建一個ServerSocket在端口5209監聽客戶請求 }catch(Exception e) { System.out.println("沒有啟動監聽:"+e); //出錯,打印出錯信息 } Socket socket=null; try{ socket=server.accept(); //2、調用accept()方法開始監聽,等待客戶端的連接 //使用accept()阻塞等待客戶請求,有客戶 //請求到來則產生一個Socket對象,並繼續執行 }catch(Exception e) { System.out.println("Error."+e); //出錯,打印出錯信息 } //3、獲取輸入流,並讀取客戶端信息 String line; BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); //由Socket對象得到輸入流,並構造相應的BufferedReader對象 PrintWriter writer=new PrintWriter(socket.getOutputStream()); //由Socket對象得到輸出流,並構造PrintWriter對象 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //由系統標准輸入設備構造BufferedReader對象 System.out.println("Client:"+in.readLine()); //在標准輸出上打印從客戶端讀入的字符串 line=br.readLine(); //從標准輸入讀入一字符串 //4、獲取輸出流,響應客戶端的請求 while(!line.equals("end")){ //如果該字符串為 "bye",則停止循環 writer.println(line); //向客戶端輸出該字符串 writer.flush(); //刷新輸出流,使Client馬上收到該字符串 System.out.println("Server:"+line); //在系統標准輸出上打印讀入的字符串 System.out.println("Client:"+in.readLine()); //從Client讀入一字符串,並打印到標准輸出上 line=br.readLine(); //從系統標准輸入讀入一字符串 } //繼續循環 //5、關閉資源 writer.close(); //關閉Socket輸出流 in.close(); //關閉Socket輸入流 socket.close(); //關閉Socket server.close(); //關閉ServerSocket }catch(Exception e) {//出錯,打印出錯信息 System.out.println("Error."+e); } } }
二、搭建客戶器端
a)、創建Socket對象,指明需要連接的服務器的地址和端口。
b)、建立連接后,通過輸出流向服務器發送請求信息。
c)、通過輸入流獲取服務器的響應信息。
d)、關閉響應資源
package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.URL; public class SocketClient { // 搭建客戶端 public static void main(String[] args) throws IOException { try { // 1、創建客戶端Socket,指定服務器地址和端口 // Socket socket=new Socket("127.0.0.1",5200); Socket socket = new Socket("192.168.1.115", 5209); System.out.println("客戶端啟動成功"); // 2、獲取輸出流,向服務器端發送信息 // 向本機的52000端口發出客戶請求 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 由系統標准輸入設備構造BufferedReader對象 PrintWriter write = new PrintWriter(socket.getOutputStream()); // 由Socket對象得到輸出流,並構造PrintWriter對象 //3、獲取輸入流,並讀取服務器端的響應信息 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 由Socket對象得到輸入流,並構造相應的BufferedReader對象 String readline; readline = br.readLine(); // 從系統標准輸入讀入一字符串 while (!readline.equals("end")) { // 若從標准輸入讀入的字符串為 "end"則停止循環 write.println(readline); // 將從系統標准輸入讀入的字符串輸出到Server write.flush(); // 刷新輸出流,使Server馬上收到該字符串 System.out.println("Client:" + readline); // 在系統標准輸出上打印讀入的字符串 System.out.println("Server:" + in.readLine()); // 從Server讀入一字符串,並打印到標准輸出上 readline = br.readLine(); // 從系統標准輸入讀入一字符串 } // 繼續循環 //4、關閉資源 write.close(); // 關閉Socket輸出流 in.close(); // 關閉Socket輸入流 socket.close(); // 關閉Socket } catch (Exception e) { System.out.println("can not listen to:" + e);// 出錯,打印出錯信息 } } }
這是我們先啟動服務器端,再啟動客戶端(順序不能亂)
即服務端、客戶端聊天通話。