Java Socket通訊

來源:互聯網
上載者:User

標籤:成功   local   www.   image   host   傳輸資料   bsp   握手   void   

 1、TCP協議是連線導向的、可靠的、有序的、以位元組流的方式發送資料,通過三向交握方式建立串連,形成傳輸資料的通道,在串連中進行大量資料的傳輸,效率會稍低

         2、Java中基於TCP協議實現網路通訊的類             用戶端的Socket類             伺服器端的ServerSocket類                         3、Socket通訊的步驟                  ① 建立ServerSocket和Socket                  ② 開啟串連到Socket的輸入/輸出流                  ③ 按照協議對Socket進行讀/寫操作                  ④ 關閉輸入輸出資料流、關閉Socket     4、伺服器端:                  ① 建立ServerSocket對象,綁定監聽連接埠                  ② 通過accept()方法監聽用戶端請求                  ③ 串連建立後,通過輸入資料流讀取用戶端發送的請求資訊                  ④ 通過輸出資料流向用戶端發送鄉音資訊                  ⑤ 關閉相關資源
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/** * 服務端 *  * @author sun * */public class Server {    public static void main(String[] args) throws IOException {        ServerSocket serverSocket = new ServerSocket(10086);// 1、建立一個伺服器端Socket,即ServerSocket,指定綁定的連接埠,並監聽此連接埠        Socket socket = null;        BufferedReader br = null;        PrintWriter pw = null;        while (true) {            System.out.println("服務端啟動");            socket = serverSocket.accept();// 2、 監聽用戶端串連,程式一直阻塞在這個語句上進行等待            // 3、擷取輸入資料流,並讀取用戶端資訊            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));            String reqstr = br.readLine();            System.out.println("服務端收到請求報文:" + reqstr);            // 4、擷取輸出資料流,響應用戶端的請求            pw = new PrintWriter(socket.getOutputStream());// 建立一個Socket            pw.write("發送報文成功,響應用戶端!");            pw.flush();            // 5、關閉資源;採用倒關原則            pw.close();            br.close();        }    }}
         5、用戶端:                  ① 建立Socket對象,指明需要已連線的服務器的地址和連接埠號碼                  ② 串連建立後,通過輸出資料流想伺服器端發送請求資訊                  ③ 通過輸入資料流擷取伺服器響應的資訊                  ④ 關閉響應資源  
/** * 用戶端 *  * @author sun * */public class Client {    public static void main(String[] args) throws IOException {        System.out.println("我是用戶端");        Socket socket = new Socket("localhost", 10086);// 1、建立用戶端Socket,指定伺服器位址和連接埠        PrintWriter pw = new PrintWriter(socket.getOutputStream());        pw.println("client request");        pw.flush();        InputStream is = socket.getInputStream();        BufferedReader br = new BufferedReader(new InputStreamReader(is));        String info = null;        while ((info = br.readLine()) != null) {            System.out.println("我是用戶端,服務端響應:" + info);        }        // 4、關閉資源        br.close();        is.close();        pw.close();    }}

在寫這個Demo時,遇到過異常,這個異常是java.net.SocketException: Socket is closed,

該異常在用戶端和伺服器均可能發生。異常的原因是己方主動關閉了串連後(調用了Socket的close方法)再對網路連接進行讀寫操作。

 

參考串連:https://www.cnblogs.com/rocomp/p/4790340.html

 

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.