<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] > 說起905.4王國,Socket家族可謂功不可沒。可以這么說,沒有Socket家族的技術背景,905.4王國根本無從談起。 本節總結一下,我們在學習Socket編程的時候,需要知道的一些基礎性概念。 ## 一、什么是 socket? socket 的原意是“插座”,在計算機通信領域,socket 被翻譯為“套接字”,它是計算機之間進行通信的一種約定或一種方式。通過socket這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據。 socket 的典型應用就是Web服務器和瀏覽器:瀏覽器獲取用戶輸入的 URL,向服務器發起請求,服務器分析接收到的 URL,將對應的網頁內容返回給瀏覽器,瀏覽器再經過解析和渲染,就將文字、圖片、視頻等元素呈現給用戶。 ### Socket通訊的基礎流程 ```[sequence] client->>server: ①Can you help me?然后client會進入到阻塞狀態 server->>server: ②Got!處理一些業務邏輯 server->>client: ③result is xxxxx ``` ### 緩沖區(Buffer) 每個 socket 被創建后,都會分配兩個緩沖區,輸入緩沖區和輸出緩沖區。 ![](https://img.kancloud.cn/66/49/66492a65532e4314ede8d946ab1f172e_697x210.png) 這些I/O緩沖區特性可整理如下: - I/O緩沖區在每個TCP套接字中單獨存在; - I/O緩沖區在創建套接字時自動生成; - 即使關閉套接字也會繼續傳送輸出緩沖區中遺留的數據; - 關閉套接字將丟失輸入緩沖區中的數據。 ### 單播、廣播、多播 - 單播。所謂的單播大多數都是點對點式的網絡,如打開網頁、發送郵件和兩人網絡聊天等情況,都是在使用點對點方式傳輸數據。 - 廣播。廣播是一種一對多的形式,是對網絡中所有的計算機發送數據,不區分目標,這就極易造成網絡中存在大量無用的垃圾通信數據,造成“廣播風暴”,使網絡變慢,嚴重時網絡會徹底癱瘓。 - 多播也稱為組播,它也是一種一對多的網絡。從組播的名字來看,它可以對某些計算機分配多播類型的IP地址以進行分組,然后只針對這些計算機發送數據,這就是多播。 ## 二、Socket的基礎操作 實現基礎的Socket通信,我們需要核心關注兩個類的使用: - ServerSocket:ServerSocket類作用是搭建Socket的服務端環境; - Socket:Socket類的主要作用是使Server與Client進行通信。 ### ServerSocket類 > ServerSocket類作用是搭建Socket的服務端環境。 **構造函數** 構造參數backlog - 主要作用就是允許接受客戶端連接請求的個數。其本質是設置最大等待隊列長度,如果隊列已滿,則拒絕該連接。 - 默認值50。 ```java public ServerSocket(int port,int backlog) ; ``` ### Socket > Socket類的主要作用是使Server與Client進行通信。 **常用方法** - `public void bind (SocketAddress bindpoint)`,作用將套接字綁定到本地地址,否則系統將自動分配端口號。 - `connect()`方法,連接方法,用于客戶端與服務端建立連接。 **示例代碼** 服務端: ```java import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * 服務端與客戶端成功地進行通信 * Created by zihan on 2021/4/26. * connect to cowboy2014@qq.com */ public class BeginServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); //結束socket通信 socket.close(); //關閉socket服務 serverSocket.close(); System.out.println("server closed!"); } } ``` 客戶端: ```java /** * Created by zihan on 2021/5/28. * connect to cowboy2014@qq.com */ public class Client { public static void main(String[] args) throws IOException { Socket socket = new Socket(); socket.bind(new InetSocketAddress("127.0.0.1",7777)); socket.connect(new InetSocketAddress("127.0.1.1",8888)); socket.close(); System.out.println("client closed!"); } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看