java通訊之Socket通訊基礎

來源:互聯網
上載者:User

標籤:

正處於網路環境下的兩個程式,它們之間通過一個互動的串連來實現資料通訊。每一個串連的通訊端叫做一個Socket。一個完整的Socket通訊程式應該包含以下幾個步驟:

①建立Socket;

②開啟串連到Socket的輸入輸出資料流;

④按照一定的協議對Socket進行讀寫操作;

④關閉Socket。

 

Socket通訊分兩部分:伺服器端和用戶端。伺服器端必須優先啟動,然後等待socket串連,如果達成串連則開始執行輸入輸出操作,通過輸入資料流擷取用戶端的請求資訊,通過

輸出資料流返回用戶端資訊。用戶端則只需建立一個Socket指定伺服器的ip和連接埠號碼即可。

 

下面看伺服器代碼:

public class SocketServer {      public static int port = 3333;      public static String ip = "172.30.1.101";            public static void main(String[] args) throws IOException {          //啟動伺服器          ServerSocket server = new ServerSocket(port);          System.out.println("server running...");          //監聽Socket          Socket socket = server.accept();          //IO流          BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));          PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));                    String client = null;          //如果接收到用戶端的exit訊號則關閉Socket          while(!"exit".equalsIgnoreCase(client = br.readLine())){              System.out.println("from client say:"+client);              pw.println("server get your info :" +client);              pw.flush();          }                            br.close();          pw.close();                    socket.close();          server.close();      }  }  

下面看用戶端代碼:

public class SocketClient {        public static void main(String[] args) throws IOException {        //串連伺服器        Socket socket = new Socket(SocketServer.ip,SocketServer.port);        System.out.println("client running...");                System.out.println("-----insert your info:");        //使用者在控制台輸入向伺服器發送的資訊        BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in));        //IO流        PrintWriter pw = new PrintWriter(socket.getOutputStream());        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));                String server = null;        //如果使用者輸入exit則關閉Socket        while(!"exit".equalsIgnoreCase(server =  brConsole.readLine())){            pw.println(server);            pw.flush();            System.out.println("from server say:"+br.readLine());        }        //當使用者輸入exit時,把exit資訊發送給伺服器,伺服器關閉當前Socket        pw.println(server);        pw.flush();                pw.close();        brConsole.close();        br.close();                socket.close();    }}

需要注意的是:

測試時,首先啟動伺服器,然後啟動用戶端即可;

使用PrintWriter寫資料的時候務必使用println,因為對方使用BufferReader的readline來取資料,如果使用print則BufferReader讀取不到資料。

這隻是基礎執行個體,不支援並發。

java通訊之Socket通訊基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.