亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java TCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解

 更新時間:2022年09月20日 08:50:45   作者:Array_new  
TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層

TCP與UDP都屬于TCP/IP協(xié)議

TCP(Transmission Control Protocol,傳輸控制協(xié)議)是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。 一個TCP連接必須要經(jīng)過三次“對話”才能建立起來,其中的過程非常復(fù)雜, 只簡單的描述下這三次對話的簡單過程:

1)主機A向主機B發(fā)出連接請求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對話;

2)主機B向主機A發(fā)送同意連接和要求同步 (同步就是兩臺主機一個在發(fā)送,一個在接收,協(xié)調(diào)工作)的數(shù)據(jù)包 :“可以,你什么時候發(fā)?”,這是第二次對話;

3)主機A再發(fā)出一個數(shù)據(jù)包確認(rèn)主機B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”, 這是第三次對話。

三次“對話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步, 經(jīng)過三次“對話”之后,主機A才向主機B正式發(fā)送數(shù)據(jù)。

TCP的三次握手過程保證了傳輸?shù)陌踩?,同時會確認(rèn)對方是否接受到信息

斷開的時候進(jìn)行四次

UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接, 當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。 在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、 計算機的能力和傳輸帶寬的限制; 在接收端,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段。

由于不需要像TCP那樣的握手過程,使得UDP的傳輸速度非??旖?,但他不保證傳輸?shù)陌踩裕膊淮_認(rèn)對方是否接收到信息

實現(xiàn)代碼:

//向指定ip發(fā)送信息
public static void main(String[] args) throws Exception{
    Socket s=new Socket(InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),10000);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    //封裝輸出流對象
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    String line;
    while (true) {
        if ((line=br.readLine())!=null){
            if("1024".equals(line)) {
                bw.write(line);
                bw.newLine();
                break;
            }
            bw.write(line);
            bw.newLine();
        }
        bw.flush();
        //獲取輸出流對象
    }
    //釋放資源
    s.close();
}
//接收發(fā)送到本機的信息
ServerSocket socket=new ServerSocket(10000);
Socket accept = socket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(accept.getInputStream()));
String line;
while ((line=br.readLine())!=null){
    System.out.println(line);
}

要讓倆臺進(jìn)行互通就可以實現(xiàn)了,讓他們運行到一起可以使用線程進(jìn)行封裝。

UDP使用的是

//創(chuàng)建發(fā)送端的Socket對象(DatagramSocket)
//創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//構(gòu)造一個數(shù)據(jù)包,發(fā)送長度為 length的數(shù)據(jù)包到指定主機上的指定端口號。

使用UDP需要將ip地址固定成ipconfig所顯示的ip網(wǎng)關(guān)等內(nèi)容

DatagramSocket ds = new DatagramSocket();
byte[] bys = "hello,udp,我來了".getBytes();
        DatagramPacket dp = new DatagramPacket(bys,bys.length,  InetAddress.getByName("10.102.13.18"),10086);
        //調(diào)用DatagramSocket對象的方法發(fā)送數(shù)據(jù)
        //void send(DatagramPacket p) 從此套接字發(fā)送數(shù)據(jù)報包
        ds.send(dp);
        System.out.println("已發(fā)送:"+new String(dp.getData(),0,dp.getLength()));
        //關(guān)閉發(fā)送端
        //void close() 關(guān)閉此數(shù)據(jù)報套接字
        ds.close();
DatagramSocket ds = new DatagramSocket(10086);
while (true) {
    //創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)
    byte[] bys = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bys, bys.length);
    //調(diào)用DatagramSocket對象的方法接收數(shù)據(jù)
    ds.receive(dp);
    System.out.println("-----");
    //解析數(shù)據(jù)包,并把數(shù)據(jù)在控制臺顯示
    System.out.println("數(shù)據(jù)是:" + new String(dp.getData(), 0, dp.getLength()));
}

我們同樣使用DatagramSocket 方法進(jìn)行接收數(shù)據(jù)

到此這篇關(guān)于Java TCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解的文章就介紹到這了,更多相關(guān)Java TCP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java對數(shù)器驗證算法詳解

    Java對數(shù)器驗證算法詳解

    這篇文章主要介紹了Java對數(shù)器驗證算法,Java對數(shù)函數(shù)的計算方法非常有問題,然而在API中卻有驚人的誤差。但是假如運用了以下的方法,用Java處理數(shù)字所碰到的小麻煩就可以輕而易舉的解決了
    2023-04-04
  • 深入理解happens-before和as-if-serial語義

    深入理解happens-before和as-if-serial語義

    本文大部分整理自《Java并發(fā)編程的藝術(shù)》,溫故而知新,加深對基礎(chǔ)的理解程度。下面可以和小編來一起學(xué)習(xí)下
    2019-05-05
  • Java程序執(zhí)行的全流程

    Java程序執(zhí)行的全流程

    這篇文章主要介紹了Java程序執(zhí)行的全流程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java?C++題解leetcode字符串輪轉(zhuǎn)KMP算法詳解

    Java?C++題解leetcode字符串輪轉(zhuǎn)KMP算法詳解

    這篇文章主要為大家介紹了Java?C++題解leetcode字符串輪轉(zhuǎn)KMP算法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 創(chuàng)建SpringBoot工程并集成Mybatis的方法

    創(chuàng)建SpringBoot工程并集成Mybatis的方法

    這篇文章主要介紹了創(chuàng)建SpringBoot工程并集成Mybatis,需要的朋友可以參考下
    2018-06-06
  • MyBatis-Plus 插件擴展的實現(xiàn)

    MyBatis-Plus 插件擴展的實現(xiàn)

    MyBatis-Plus通過插件擴展機制增強功能,基于MyBatis Interceptor攔截器,包括分頁插件、邏輯刪除、SQL性能分析和樂觀鎖等,開發(fā)者可自定義插件以適應(yīng)特定需求,有效地增強SQL執(zhí)行過程的控制和優(yōu)化,同時注意插件使用的性能影響和執(zhí)行順序
    2024-09-09
  • Springboot如何配置yml文件與映射到j(luò)ava類

    Springboot如何配置yml文件與映射到j(luò)ava類

    這篇文章主要介紹了Springboot如何配置yml文件與映射到j(luò)ava類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot使用JTA實現(xiàn)對多數(shù)據(jù)源的事務(wù)管理

    SpringBoot使用JTA實現(xiàn)對多數(shù)據(jù)源的事務(wù)管理

    了解事務(wù)的都知道,在我們?nèi)粘i_發(fā)中單單靠事務(wù)管理就可以解決絕大多數(shù)問題了,但是為啥還要提出JTA這個玩意呢,到底JTA是什么呢?他又是具體來解決啥問題的呢?本文小編就給大家介紹一下如何在Spring Boot中使用JTA實現(xiàn)對多數(shù)據(jù)源的事務(wù)管理
    2023-11-11
  • SpringBoot2.0整合Redis自定義注入bean組件配置的實戰(zhàn)教程

    SpringBoot2.0整合Redis自定義注入bean組件配置的實戰(zhàn)教程

    這篇文章主要介紹了SpringBoot2.0整合Redis自定義注入bean組件配置,我們將基于SpringBoot2.0整合搭建的微服務(wù)項目為奠基,開啟中間件Redis的實戰(zhàn)之路,需要的朋友可以參考下
    2023-06-06
  • Mybatis in條件傳參的三種實現(xiàn)方式(直接$,List,[])

    Mybatis in條件傳參的三種實現(xiàn)方式(直接$,List,[])

    這篇文章主要介紹了Mybatis in條件傳參的三種實現(xiàn)方式(直接$,List,[]),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論