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

Java實(shí)現(xiàn)基于UDP協(xié)議的網(wǎng)絡(luò)通信UDP編程

 更新時(shí)間:2023年04月24日 09:13:00   作者:Wen先森  
在Java中使用UDP編程,仍然需要使用Socket,因?yàn)閼?yīng)用程序在使用UDP時(shí)必須指定網(wǎng)絡(luò)接口(IP地址)和端口號。注意:UDP端口和TCP端口雖然都使用0~65535,但他們是兩套獨(dú)立的端口,即一個應(yīng)用程序用TCP占用了端口1234,不影響另一個應(yīng)用程序用UDP占用端口1234

UDP編程通信

基本介紹

  • 類DatagramSocket和DatagramPacket【數(shù)據(jù)包/數(shù)據(jù)報(bào)】實(shí)現(xiàn)了基于UDP協(xié)議網(wǎng)絡(luò)程序。
  • UDP數(shù)據(jù)報(bào)通過數(shù)據(jù)報(bào)套接字DatagramSocket發(fā)送和接收,系統(tǒng)不保證UDP數(shù)據(jù)報(bào)一定能安全送到目的地,也不確信什么時(shí)候可以抵達(dá)。
  • DatagramPacket對象封裝了UDP數(shù)據(jù)報(bào),在數(shù)據(jù)報(bào)中包含了發(fā)送端的IP地址和端口號以及接收端的IP地址和端口號。
  • UDP協(xié)議中每個數(shù)據(jù)報(bào)都給出了完整的地址信息,因此無須建立發(fā)送方和接收方的連接。

基本流程

  • 核心的兩個類/對象DatagramSocket域DatagramPacket
  • 建立發(fā)送端,接收端。
  • 建立數(shù)據(jù)包
  • 調(diào)用DatagramSocket的發(fā)送、接收方法
  • 關(guān)閉DatagramSocket。

UDP網(wǎng)絡(luò)編程原理示意圖

UDP說明:

  • 沒有明確的服務(wù)端和客戶端,演變成數(shù)據(jù)的發(fā)送端和接收端。
  • 接收數(shù)據(jù)和發(fā)生數(shù)據(jù)是通過DatagramSocket對象完成。
  • 將數(shù)據(jù)封裝到DatagramPacket對象/裝包。
  • 當(dāng)接收到DatagramPacket對象,需要進(jìn)行拆包,取出數(shù)據(jù)
  • DatagramSocket可以指定在哪個端口接收數(shù)據(jù)。
package com.study.srv.demo18;
import java.io.IOException;
import java.net.*;
/**
 * @version 1.0
 * UDP發(fā)送端
 */
public class Demo11 {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建DatagramSocket對象,準(zhǔn)備發(fā)送和接收數(shù)據(jù),在9998端口接收
        DatagramSocket datagramSocket = new DatagramSocket(9998);
        //2.將需要發(fā)送的數(shù)據(jù),封裝到DatagramPacket對象
        String s="發(fā)送的數(shù)據(jù)";
        byte[] buf=s.getBytes();
        InetAddress ip = InetAddress.getByName("192.168.0.18");
        //說明:封裝的DatagramPacket對象
        //buf 內(nèi)容字節(jié)數(shù)組
        //buf.length 數(shù)據(jù)長度
        //ip 主機(jī)(ip)
        //9999 端口
        DatagramPacket packet = new DatagramPacket(buf, buf.length, ip, 9999);
        //發(fā)送數(shù)據(jù)
        datagramSocket.send(packet);
        //關(guān)閉資源
//        datagramSocket.close();
        System.out.println("發(fā)送完畢");
        //發(fā)送端變?yōu)榻邮斩私邮諗?shù)據(jù)
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
        datagramSocket.receive(datagramPacket);
        int length = datagramPacket.getLength();
        byte[] data = datagramPacket.getData();
        String string = new String(data, 0, length);
        System.out.println(string);
        datagramSocket.close();
        System.out.println("接受結(jié)束");
    }
}
package com.study.srv.demo18;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
 * @version 1.0
 *UDP接收端
 */
public class Demo10 {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建一個 DatagramSocket對象,準(zhǔn)備在9999接收數(shù)據(jù)
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        //2.構(gòu)建一個DatagramPacket 對象,準(zhǔn)備接收數(shù)據(jù)
        //在UDP協(xié)議,一個數(shù)據(jù)包最大64k
        byte[] buf=new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.接收方法 將通過網(wǎng)絡(luò)傳輸?shù)腄atagramPacket對象填充到packet里去。
        System.out.println("接收端等待接收");
        datagramSocket.receive(packet);
        //4.可以對packet進(jìn)行拆包,取出數(shù)據(jù),并顯示
        //實(shí)際接收到的數(shù)據(jù)字節(jié)長度
        int length = packet.getLength();
        //實(shí)際接收到的數(shù)據(jù)
        byte[] data = packet.getData();
        String string = new String(data, 0, length);
        System.out.println(string);
        //5.關(guān)閉資源
//        datagramSocket.close();
        System.out.println("接收結(jié)束");
        //接收端變?yōu)榘l(fā)送端,發(fā)送數(shù)據(jù)
        String s="接收端變?yōu)榘l(fā)送端,發(fā)送數(shù)據(jù)";
        byte[] bytes=s.getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.18"), 9998);
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
        System.out.println("發(fā)送完畢");
    }
}

到此這篇關(guān)于Java UDP編程的文章就介紹到這了,更多相關(guān)Java UDP編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)HTTP調(diào)用的7 種方式

    SpringBoot實(shí)現(xiàn)HTTP調(diào)用的7 種方式

    本文主要介紹了SpringBoot實(shí)現(xiàn)HTTP調(diào)用的7 種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 關(guān)于使用MyBatis簡化JDBC開發(fā)和解決SQL語句警告的問題

    關(guān)于使用MyBatis簡化JDBC開發(fā)和解決SQL語句警告的問題

    這篇文章主要介紹了關(guān)于使用MyBatis簡化JDBC開發(fā)和解決SQL語句警告的問題,如果idea和數(shù)據(jù)庫沒有建立鏈接,idea不識別表的信息,就會出現(xiàn)SQL語句的警告,需要的朋友可以參考下
    2023-05-05
  • Maven中dependencyManagement管理項(xiàng)目依賴項(xiàng)

    Maven中dependencyManagement管理項(xiàng)目依賴項(xiàng)

    在開發(fā)?Java?項(xiàng)目時(shí),管理和協(xié)調(diào)依賴項(xiàng)的版本號是一項(xiàng)重要而繁瑣的任務(wù),本文主要介紹了Maven中dependencyManagement管理項(xiàng)目依賴項(xiàng),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • java中BigDecimal類的構(gòu)造詳解及使用

    java中BigDecimal類的構(gòu)造詳解及使用

    這篇文章主要介紹了java中BigDecimal類的構(gòu)造詳解及使用,Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算,需要的朋友可以參考下
    2023-07-07
  • win7下安裝 JDK 基本流程

    win7下安裝 JDK 基本流程

    這篇文章主要介紹了win7下安裝 JDK 基本流程,需要的朋友可以參考下
    2014-05-05
  • Maven deploy plugin使用方式

    Maven deploy plugin使用方式

    這篇文章主要介紹了Maven deploy plugin使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java中TCP通信的實(shí)現(xiàn)方法詳解

    Java中TCP通信的實(shí)現(xiàn)方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中TCP通信的實(shí)現(xiàn)方法,TCP通信能實(shí)現(xiàn)兩臺計(jì)算機(jī)之間的數(shù)據(jù)交互,通信的兩端,要嚴(yán)格區(qū)分為客戶端(Client)與服務(wù)端(Server),需要的朋友可以參考下
    2023-09-09
  • java實(shí)現(xiàn)24點(diǎn)游戲

    java實(shí)現(xiàn)24點(diǎn)游戲

    每次取出4張牌,使用加減乘除,第一個能得出24者為贏,這篇文章主要就為大家詳細(xì)介紹了java實(shí)現(xiàn)24點(diǎn)游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • java實(shí)現(xiàn)的小時(shí)鐘示例分享

    java實(shí)現(xiàn)的小時(shí)鐘示例分享

    這篇文章主要介紹了java實(shí)現(xiàn)的小時(shí)鐘示例,需要的朋友可以參考下
    2014-02-02
  • Java 根據(jù)網(wǎng)絡(luò)URL獲取該網(wǎng)頁上面所有的img標(biāo)簽并下載圖片

    Java 根據(jù)網(wǎng)絡(luò)URL獲取該網(wǎng)頁上面所有的img標(biāo)簽并下載圖片

    這篇文章主要介紹了Java 根據(jù)網(wǎng)絡(luò)URL獲取該網(wǎng)頁上面所有的img標(biāo)簽并下載圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11

最新評論

宁都县| 东乡| 凤山县| 章丘市| 马鞍山市| 宜兰市| 伊吾县| 遵义市| 拉萨市| 金阳县| 左贡县| 临澧县| 嘉定区| 阿荣旗| 吉木萨尔县| 东安县| 长海县| 临沧市| 哈巴河县| 洪雅县| 慈利县| 财经| 绥阳县| 梅河口市| 安庆市| 西丰县| 紫金县| 和平县| 临洮县| 泗洪县| 本溪| 虎林市| 安龙县| 永登县| 朔州市| 罗田县| 锦屏县| 泾川县| 任丘市| 鞍山市| 阳高县|