最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Netty網絡編程零基礎入門

 更新時間:2022年08月01日 15:14:47   作者:kaico2018  
Netty是一個異步的、基于事件驅動的網絡應用框架,用于快速開發(fā)可維護、高性能的網絡服務器和客戶端,如果你還不了解它的使用,就趕快繼續(xù)往下看吧

OSI七層網絡模型

應用層:Http協(xié)議、文件服務器、郵件服務器

表示層:數據轉換解決不同系統(tǒng)中間通訊的兼容問題

會話層:建立與應用程序的會話連接(socket)

傳輸層:提供端口號(區(qū)分不同的應用程序)和傳輸的協(xié)議(TCP和UDP)

網絡層:為數據實現路由(路由器、交換機)

數據鏈路層:對傳輸的地址的幀以及錯誤的檢測。

物理層:以二進制的形式在物理機器.上實現傳輸。(光纖、專線、各種物理介質實現)

Socket技術

屬于傳輸層非常核心的內容任何的編程語言都是支持socket (網絡編程技術) 技術開發(fā),目的就是解決兩個應用程序通訊的問題;注意: socket 不屬于某種協(xié)議,只是網絡編程技術。socket技術支持兩種協(xié)議(TCP和UDP) 。

應用場景: http協(xié)議、rpc框架

TCP協(xié)議是一個可靠的協(xié)議,因為建立連接的時候必須通過三次握手才可以實現數據傳輸,所以數據不會丟失。

UDP協(xié)議面向無連接協(xié)議,UDP在通訊的時候不需要對方的存在,屬于不可靠傳輸,可能存在數據丟包的問題。應用場景:聊天

TCP協(xié)議

三次握手:經過三次握手之后建立通訊才開始進行數據傳輸

白話文描述:

1、第一次握手:客戶端會給服務端發(fā)送消息問:你在不在?

2、第二次握手:服務端收到了客戶端咨詢的(”你在不在?“),服務端就給客戶端發(fā)送消息回復,就說:我在。

3、第三次握手:客戶端收到服務端回復我在的呢”,客戶端就會給服務端發(fā)送消息,開始傳輸數據。

三次握手成功之后,開始建立連接傳輸數據。

專業(yè)術語描述:

Syn (建立連接)、Ack (確認標記)、fin (終 止標記)

1.第一次握手:客戶端會向服務器端發(fā)送代碼syn=1, 隨機會產生一-個數SEQ=x發(fā)送到我們的服務器端;

2.第二次握手:服務器端確認收到syn和X值,回復給客戶端ack=x+1和seq = y (隨機數)發(fā)送給客戶端。

3.第三次握手:客戶端接受syn、ack、y值之后向服務器發(fā)送ack=y+1,此包發(fā)送完畢之后就可以開始建立連接。

為什么要有三次握手,不是兩次?

兩次可能存在網絡抖動的情況下,三次握手比較穩(wěn)定。第三次握手也可以叫預傳輸數據,看看數據是否可以傳輸過去。

四次揮手:可靠關閉連接

關閉連接:

第一次揮手: 客戶端向服務器端發(fā)送釋放的報文,停止發(fā)送數據 fin=1、生成一個序列號seq=u;

第二次揮手: 服務器端接受到釋放的報文后,發(fā)送ack=u+1;隨機生成的seq=v給客戶端;當前狀態(tài)為關閉等待狀態(tài),客戶端收到了服務器確認通知之后,此時客戶端就會進入到終止狀態(tài),等待服務器端發(fā)送釋放報文。

第三次揮手:服務器端最后數據發(fā)送完畢之后,就向客戶端發(fā)送連接釋放報文,FIN=1,ack=u+1 當前為半關閉狀態(tài),隨機生成一個隨機樹w

第四次揮手,客戶端必須發(fā)出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態(tài)。注意此時TCP連接還沒有釋放,必須經過2∗∗MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態(tài)。

服務器只要收到了客戶端發(fā)出的確認,立即進入CLOSED狀態(tài)。同樣,撤銷TCB后,就結束了這次的TCP連接??梢钥吹?,服務器結束TCP連接的時間要比客戶端早一些。

白話文翻譯四次揮手:

第一次揮手 客戶端向服務端發(fā)送一個釋放連接通知;

第二次揮手 服務端接受到釋放通知之后,告訴給客戶端說等待一下,因為可能存在有其他的數據沒有發(fā)送完畢,等待數據全部傳輸完畢之后就開始 關閉連接;

第三次揮手 服務器端所有的數據發(fā)送完畢之后,就告訴客戶端說現在可以釋放連接了。

第四次揮手: 客戶端確認是最終釋放連接通知,ok 就開始 就向服務區(qū)端發(fā)送我們可以開始關閉連接啦;

Java語言創(chuàng)建socket應用

這里使用BIO 模型來實現

服務端

public class Server {
    private static int port = 8585;
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(port);
            //開始監(jiān)聽
            System.out.println("服務器開始監(jiān)聽,監(jiān)聽端口:" + port);
            while(true) {
                Socket socket = serverSocket.accept();//阻塞  等待客戶端連接
                System.out.println("接受一個客戶端的請求.....");
                InputStream in = socket.getInputStream();
                int len = -1;
                byte[] buff = new byte[1024];
                while ((len = in.read(buff)) != -1) {//阻塞   等待客戶端發(fā)送數據
                    String str = new String(buff, 0, len);
                    System.out.println("讀取到客戶端的輸入字符:" + str);
                }
                in.close();
                socket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客戶端

public class Client {
    private static int port = 8585;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入客戶端編號:");
        String no = sc.next();
        Socket socket = null;
        try {
            System.out.println("客戶端"+no+"開始連接服務器..");
           socket = new Socket("127.0.0.1",port);
           if(socket!=null){
               System.out.println("客戶端:"+no+"連接服務器成功!");
           }
            OutputStream out = socket.getOutputStream();
           while(true){
               System.out.println("客戶端"+no+"請輸入要發(fā)送字符(輸入quit表示結束):");
               String str = sc.next();
               if(str.trim().equalsIgnoreCase("quit"))
                   break;
               out.write((no+":"+str).getBytes());
           }
            System.out.println("客戶端"+no+"連接中斷");
           out.close();
           socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

http協(xié)議

Http協(xié)議是一種超文本傳輸的協(xié)議,基于TCP/IP協(xié)議實現的包裝,img、css、html

Http協(xié)議 默認端口號80 明文傳輸

Https協(xié)議 443 加密傳輸

Https 比http協(xié)議安全 ssl+證書實現傳輸

Http協(xié)議特征:

  • 無狀態(tài) 沒有記憶的會話 token、jwt、Session
  • 請求(req)與響應模型(resp)
  • 簡單快捷
  • 靈活可以傳輸任何類型

Http協(xié)議版本

Http協(xié)議1.0:規(guī)定客戶端與服務器端傳輸完成之后,立馬關閉連接;短連接

Http協(xié)議1.1 :長連接

長連接與短連接

長連接:客戶端與服務器端建立連接之后,不會立馬關閉連接,會保持一定復用機制,默認情況下在300s空閑情況下自動斷開連接;

短連接:客戶度與服務器端發(fā)送消息之后,立馬關閉連接 如果頻繁發(fā)送Http請求,可能消耗服務器端資源;

到此這篇關于Netty網絡編程零基礎入門的文章就介紹到這了,更多相關Netty網絡編程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Security注冊過濾器注意事項詳解

    Spring Security注冊過濾器注意事項詳解

    前兩天和小伙伴聊了 Spring Security+JWT 實現無狀態(tài)登錄,然后有小伙伴反饋了一個問題,感覺這是一個我們平時寫代碼容易忽略的問題,所以本文給大家介紹了Spring Security注冊過濾器注意事項,需要的朋友可以參考下
    2024-06-06
  • java unicode轉碼為中文實例

    java unicode轉碼為中文實例

    這篇文章主要介紹了java unicode轉碼為中文的實例,大家參考使用吧
    2013-12-12
  • 談談java的concurrent用法

    談談java的concurrent用法

    這篇文章給大家介紹java的concurrent用法,感興趣的朋友一起學習吧
    2015-10-10
  • Java類的定義以及執(zhí)行順序學習教程

    Java類的定義以及執(zhí)行順序學習教程

    這篇文章主要介紹了Java類的定義以及執(zhí)行順序學習教程,包括對象的創(chuàng)建等面向對象編程的基礎知識,需要的朋友可以參考下
    2015-09-09
  • SpringCloud?eureka(server)微服務集群搭建過程

    SpringCloud?eureka(server)微服務集群搭建過程

    這篇文章主要介紹了微服務SpringCloud-eureka(server)集群搭建,?項目搭建的主要步驟和配置就是創(chuàng)建項目和引入pom依賴,本文通過圖文示例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 項目為什么引入log4j而不是logback代碼

    項目為什么引入log4j而不是logback代碼

    這篇文章主要介紹了項目為什么引入log4j而不是logback代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 詳解Java中的日期類

    詳解Java中的日期類

    這篇文章主要介紹了Java中的日期類的相關資料,幫助大家更好的利用Java處理時間,感興趣的朋友可以了解下
    2020-10-10
  • Java 如何快速,優(yōu)雅的實現導出Excel

    Java 如何快速,優(yōu)雅的實現導出Excel

    這篇文章主要介紹了Java 如何快速,優(yōu)雅的實現導出Excel,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-03-03
  • JVM?jstack實戰(zhàn)之死鎖問題詳解

    JVM?jstack實戰(zhàn)之死鎖問題詳解

    如果在生產環(huán)境發(fā)生了死鎖,我們將看到的是部署的程序沒有任何反應了,這個時候我們可以借助?jstack進行分析,下面我們實戰(zhàn)操作查找死鎖的原因
    2022-10-10
  • Java關鍵字synchronized基本使用詳解

    Java關鍵字synchronized基本使用詳解

    這篇文章主要給大家介紹了關于Java關鍵字synchronized基本使用的相關資料,synchronized可以用來同步靜態(tài)和非靜態(tài)方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論

稷山县| 湖南省| 佛教| 五大连池市| 日喀则市| 定结县| 报价| 响水县| 固镇县| 怀仁县| 鄂伦春自治旗| 洪泽县| 西乡县| 三台县| 贵州省| 德阳市| 四川省| 米易县| 泰兴市| 台南市| 建始县| 慈利县| 西藏| 湛江市| 肃北| 岑溪市| 孙吴县| 蛟河市| 大城县| 精河县| 雷波县| 钟祥市| 航空| 大兴区| 格尔木市| 合水县| 丰顺县| 永修县| 西乌| 右玉县| 浦江县|