亚洲乱码中文字幕综合,中国熟女仑乱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)主機(jī)A向主機(jī)B發(fā)出連接請求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對話;

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

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

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

TCP的三次握手過程保證了傳輸?shù)陌踩裕瑫r會確認(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ù)的速度、 計(jì)算機(jī)的能力和傳輸帶寬的限制; 在接收端,UDP把每個消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個消息段。

由于不需要像TCP那樣的握手過程,使得UDP的傳輸速度非??旖荩槐WC傳輸?shù)陌踩?,也不確認(rèn)對方是否接收到信息

實(shí)現(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ā)送到本機(jī)的信息
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)行互通就可以實(shí)現(xiàn)了,讓他們運(yù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ù)包到指定主機(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中BigDecimal的使用踩坑記錄

    java中BigDecimal的使用踩坑記錄

    這篇文章主要為大家詳細(xì)介紹了java中使用BigDecimal會踩坑的地方以及相關(guān)的解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Java concurrency集合之LinkedBlockingDeque_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency集合之LinkedBlockingDeque_動力節(jié)點(diǎn)Java學(xué)院整理

    LinkedBlockingDeque是雙向鏈表實(shí)現(xiàn)的雙向并發(fā)阻塞隊(duì)列。該阻塞隊(duì)列同時支持FIFO和FILO兩種操作方式,即可以從隊(duì)列的頭和尾同時操作(插入/刪除);并且,該阻塞隊(duì)列是支持線程安全。
    2017-06-06
  • Java線程中的ThreadLocal原理及源碼解析

    Java線程中的ThreadLocal原理及源碼解析

    這篇文章主要介紹了Java線程中的ThreadLocal原理及源碼解析,ThreadLocal 的作用是為每個線程保存一份局部變量的引用,實(shí)現(xiàn)多線程之間的數(shù)據(jù)隔離,從而避免了線程不安全情況的發(fā)生,需要的朋友可以參考下
    2023-12-12
  • web 容器的設(shè)計(jì)如何實(shí)現(xiàn)

    web 容器的設(shè)計(jì)如何實(shí)現(xiàn)

    這篇文章主要介紹了web 容器的設(shè)計(jì)如何實(shí)現(xiàn)的相關(guān)資料,本文旨在介紹如何設(shè)計(jì)一個web容器,只探討實(shí)現(xiàn)的思路,并不涉及過多的具體實(shí)現(xiàn)。把它分解劃分成若干模塊和組件,每個組件模塊負(fù)責(zé)不同的功能,需要的朋友可以參考下
    2016-12-12
  • JAVA復(fù)制數(shù)組和重置數(shù)組大小操作

    JAVA復(fù)制數(shù)組和重置數(shù)組大小操作

    這篇文章主要介紹了JAVA復(fù)制數(shù)組和重置數(shù)組大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java封裝類型與基礎(chǔ)類型對比示例分析

    java封裝類型與基礎(chǔ)類型對比示例分析

    這篇文章主要為大家介紹了java封裝類型與基礎(chǔ)類型對比示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • mybatis如何批量添加一對多中間表

    mybatis如何批量添加一對多中間表

    這篇文章主要介紹了mybatis如何批量添加一對多中間表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • AsyncHttpClient exception異常源碼流程解析

    AsyncHttpClient exception異常源碼流程解析

    這篇文章主要為大家介紹了AsyncHttpClient的exception源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java?Agent探針技術(shù)詳解示例

    Java?Agent探針技術(shù)詳解示例

    這篇文章主要介紹了Java?Agent?探針技術(shù)詳情,Java?中的?Agent?技術(shù)可以讓我們無侵入性的去進(jìn)行代理,最常用于程序調(diào)試、熱部署、性能診斷分析等場景,下文更多相關(guān)資料,感興趣的小伙伴可以參考一下
    2022-06-06
  • java利用JAXB實(shí)現(xiàn)對象和xml互相轉(zhuǎn)換方法與實(shí)例詳解

    java利用JAXB實(shí)現(xiàn)對象和xml互相轉(zhuǎn)換方法與實(shí)例詳解

    這篇文章主要介紹了java利用JAXB實(shí)現(xiàn)對象和xml互相轉(zhuǎn)換方法與實(shí)例詳解,需要的朋友可以參考下
    2020-02-02

最新評論