大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java udp通信指南

Java udp通信指南

更新時間:2022-07-29 11:46:34 來源:動力節點 瀏覽1430次

動力節點小編來為大家介紹Java udp通信指南。

1. 概述

在本文中,我們將探索通過用戶數據報協議 ( UDP ) 與 Java 進行的網絡通信。

UDP 是一種通信協議,它通過網絡傳輸獨立的數據包,不保證到達,也不保證傳送的順序。

2. 為什么使用 UDP?

UDP 與更常見的 TCP 完全不同。但在考慮 UDP 的表面缺點之前,重要的是要了解缺乏開銷可以使其比 TCP 快得多。

除了速度之外,我們還需要記住,某些類型的通信不需要 TCP 的可靠性,而是重視低延遲。該視頻是一個很好的應用程序示例,它可能受益于通過 UDP 而不是 TCP 運行。

3. 構建 UDP 應用程序

構建 UDP 應用程序與構建 TCP 系統非常相似;唯一的區別是我們不在客戶端和服務器之間建立點對點連接。

設置也非常簡單。Java 附帶了對 UDP 的內置網絡支持——它是java.net包的一部分。因此,要通過 UDP 執行網絡操作,我們只需要從java.net包中導入Java類:java.net.DatagramSocket和java.net.DatagramPacket。

在接下來的部分中,我們將學習如何設計通過 UDP 進行通信的應用程序;我們將為此應用程序使用流行的回聲協議。

首先,我們將構建一個回顯服務器,將發送給它的任何消息發回,然后是一個回顯客戶端,它只向服務器發送任意消息,最后,我們將測試應用程序以確保一切正常。

4. 服務器

在 UDP 通信中,單個消息被封裝在DatagramPacket中,通過DatagramSocket發送。

讓我們從設置一個簡單的服務器開始:

public class EchoServer extends Thread {
    private DatagramSocket socket;
    private boolean running;
    private byte[] buf = new byte[256];
    public EchoServer() {
        socket = new DatagramSocket(4445);
    }
    public void run() {
        running = true;
        while (running) {
            DatagramPacket packet 
              = new DatagramPacket(buf, buf.length);
            socket.receive(packet);            
            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            packet = new DatagramPacket(buf, buf.length, address, port);
            String received 
              = new String(packet.getData(), 0, packet.getLength());            
            if (received.equals("end")) {
                running = false;
                continue;
            }
            socket.send(packet);
        }
        socket.close();
    }
}

我們創建了一個全局DatagramSocket,我們將在整個過程中使用它來發送數據包,一個字節數組來包裝我們的消息,以及一個名為running的狀態變量。

為簡單起見,服務器擴展了Thread,因此我們可以在run方法中實現所有內容。

在run內部,我們創建了一個 Java while 循環語句,該循環一直運行,直到running因某些錯誤或來自客戶端的終止消息而變為 false。

在循環的頂部,我們實例化一個DatagramPacket來接收傳入的消息。

接下來,我們在套接字上調用接收方法。此方法阻塞,直到消息到達并將消息存儲在傳遞給它的DatagramPacket的字節數組中。

收到消息后,我們檢索客戶端的地址和端口,因為我們要發

回響應。

接下來,我們創建一個DatagramPacket用于向客戶端發送消息。注意與接收數據包的簽名不同。這還需要我們向其發送消息的客戶端的地址和端口。

5. 客戶

現在讓我們為這個新服務器推出一個簡單的客戶端:

public class EchoClient {
    private DatagramSocket socket;
    private InetAddress address;
    private byte[] buf;
    public EchoClient() {
        socket = new DatagramSocket();
        address = InetAddress.getByName("localhost");
    }
    public String sendEcho(String msg) {
        buf = msg.getBytes();
        DatagramPacket packet 
          = new DatagramPacket(buf, buf.length, address, 4445);
        socket.send(packet);
        packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);
        String received = new String(
          packet.getData(), 0, packet.getLength());
        return received;
    }
    public void close() {
        socket.close();
    }
}

該代碼與服務器的代碼沒有什么不同。我們有我們的全局DatagramSocket和服務器地址。我們在構造函數中實例化這些。

我們有一個單獨的方法將消息發送到服務器并返回響應。

我們首先將字符串消息轉換為字節數組,然后創建一個DatagramPacket用于發送消息。

接下來——我們發送消息。我們立即將DatagramPacket轉換為接收數據包。

當回顯到達時,我們將字節轉換為字符串并返回該字符串。

6. 測試

在UDPTest.java類中,我們只需創建一個測試來檢查兩個應用程序的回顯能力:

public class UDPTest {
    EchoClient client;
    @Before
    public void setup(){
        new EchoServer().start();
        client = new EchoClient();
    }
    @Test
    public void whenCanSendAndReceivePacket_thenCorrect() {
        String echo = client.sendEcho("hello server");
        assertEquals("hello server", echo);
        echo = client.sendEcho("server is working");
        assertFalse(echo.equals("hello server"));
    }
    @After
    public void tearDown() {
        client.sendEcho("end");
        client.close();
    }
}

在setup中,我們啟動服務器并創建客戶端。在tearDown方法中,我們向服務器發送終止消息,以便它可以關閉,同時我們關閉客戶端。

7. 結論

在本文中,我們了解了用戶數據報協議并成功構建了我們自己的通過 UDP 通信的客戶端-服務器應用程序。如果大家想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容從入門到精通,細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久99精品国产一区二区三区 | 日韩一区二区视频 | 欧美一级毛片视频 | 任我鲁精品视频精品 | 91在线精品老司机免费播放 | 国产精品777 | 久久亚洲精品专区蓝色区 | 奇米影视777中文久久爱 | 麻豆久久精品免费看国产 | 色拍拍欧美视频在线看 | 国产欧美精品三区 | 国产99精品免费视频看6 | 亚洲一级黄色大片 | 欧美一级毛片欧美一级 | 日本一级片网站 | 伊人精品视频 | 国产成人综合日韩精品婷婷九月 | 久久在线免费 | 精品久久久影院 | 日韩 欧美 亚洲 中文字幕 | 久久国产影视免费精品 | 久久天堂一区二区三区 | 九九精品国产兔费观看久久 | 玖玖国产在线 | 香蕉精品在线 | 午夜免费体验区 | 免费的涩涩视频在线播放 | 四虎影视在线影院在线观看 | 天天操天天舔天天干 | 国产呦系列 欧美呦 日韩呦 | 欧美真人毛片动作视频 | 久久久久久国产精品免费免费 | 麻豆亚洲精品一区二区 | 奇米77777| 最新日本免费一区二区三区中文 | 亚洲一区中文字幕在线观看 | 九九九影院 | 日韩久久免费视频 | 国产精品情侣久久婷婷文字 | 特级黄色 | 中文字幕在线一区 |