欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java網(wǎng)絡(luò)編程之UDP網(wǎng)絡(luò)通信詳解

 更新時(shí)間:2022年09月23日 15:29:01   作者:興趣使然黃小黃  
這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程中的UDP網(wǎng)絡(luò)通信的原理與實(shí)現(xiàn),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下

1.UDP網(wǎng)絡(luò)通信編程原理

1.1 UDP網(wǎng)絡(luò)通信編程介紹

類 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)一定能夠安全送達(dá)目的地,也不確定什么時(shí)候可以抵達(dá);

DatagramPacket 對(duì)象封裝了 UDP數(shù)據(jù)報(bào),在數(shù)據(jù)報(bào)中包含了發(fā)送端IP地址和端口號(hào),以及接收端的IP地址和端口號(hào);

UDP協(xié)議中每個(gè)數(shù)據(jù)報(bào)都給出了完整的地址信息,因此無法建立發(fā)送方與接收方的連接。

沒有明確的服務(wù)端和客戶端,演變成數(shù)據(jù)的發(fā)送端和接收端;

接收數(shù)據(jù)和發(fā)送數(shù)據(jù)都是通過 DatagramSocket 對(duì)象完成。

1.2 UDP網(wǎng)絡(luò)通信編程的基本流程

核心的兩個(gè)類/對(duì)象,DatagramSocket與DatagramPacket;

建立發(fā)送端和接收端;

建立數(shù)據(jù)包;

調(diào)用DatagramSocket的發(fā)送和接收方法;

關(guān)閉DatagramSocket。

2.UDP網(wǎng)絡(luò)通信編程案例

1.編寫一個(gè)接收端A,一個(gè)發(fā)送端B;

2.接收端在 9999端口等待接收數(shù)據(jù)(receive);

3.發(fā)送端向接收端發(fā)送數(shù)據(jù):“你好!接收端”;

4.接收端接收到發(fā)送端的數(shù)據(jù)后,回復(fù):“你好!發(fā)送端”,再退出;

5.發(fā)送端接收回復(fù)的數(shù)據(jù),退出。

UDPReceiverA

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author 興趣使然黃小黃
 * @version 1.0
 * 接收端A
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建一個(gè)DatagramSocket對(duì)象,準(zhǔn)備在9999接收數(shù)據(jù)
        DatagramSocket socket = new DatagramSocket(9999);
        //2.構(gòu)建一個(gè)DatagramPacket對(duì)象,準(zhǔn)備接收數(shù)據(jù)
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.調(diào)用接收方法,將通過網(wǎng)絡(luò)傳輸?shù)?DatagramPacket對(duì)象 填充到 packet對(duì)象
        System.out.println("接收端A 等待接收數(shù)據(jù)...");
        socket.receive(packet);
        //4.把packet進(jìn)行拆包,取出數(shù)據(jù)
        int length = packet.getLength();//實(shí)際數(shù)據(jù)字節(jié)長(zhǎng)度
        byte[] data = packet.getData();//實(shí)際接收的數(shù)據(jù)
        String s = new String(data, 0, length);
        System.out.println(s);

        //回復(fù)信息給B端
        data = "你好!發(fā)送端".getBytes();
        packet = new DatagramPacket(data, 0, data.length,
                InetAddress.getLocalHost(), 9998);
        socket.send(packet);
        //5.關(guān)閉資源
        socket.close();
    }
}

UDPSenderB

import java.io.IOException;
import java.net.*;

/**
 * @author 興趣使然黃小黃
 * @version 1.0
 * 發(fā)送端B
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建 DatagramSocket 對(duì)象,準(zhǔn)備在9998發(fā)送和接收數(shù)據(jù)
        DatagramSocket socket = new DatagramSocket(9998);
        //2.將需要發(fā)送的數(shù)據(jù),封裝到 DatagramPacket 中
        byte[] data = "你好!接收端".getBytes();
        DatagramPacket datagramPacket =
                new DatagramPacket(data, 0, data.length,
                        InetAddress.getLocalHost(), 9999);
        socket.send(datagramPacket);

        //接收A消息
        socket.receive(datagramPacket);
        int length = datagramPacket.getLength();//實(shí)際數(shù)據(jù)字節(jié)長(zhǎng)度
        data = datagramPacket.getData();//實(shí)際接收的數(shù)據(jù)
        String s = new String(data, 0, length);
        System.out.println(s);
        //關(guān)閉資源
        socket.close();
    }
}

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

相關(guān)文章

  • 淺談spring DI 依賴注入方式和區(qū)別

    淺談spring DI 依賴注入方式和區(qū)別

    Spring框架對(duì)Java開發(fā)的重要性不言而喻,本文主要介紹了spring DI 依賴注入方式和區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java基礎(chǔ)之super關(guān)鍵字淺析

    Java基礎(chǔ)之super關(guān)鍵字淺析

    java中的super關(guān)鍵字是一個(gè)引用變量,用于引用直接父類對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • SpringBoot中@EnableAsync和@Async注解的使用小結(jié)

    SpringBoot中@EnableAsync和@Async注解的使用小結(jié)

    在SpringBoot中,可以通過@EnableAsync注解來啟動(dòng)異步方法調(diào)用的支持,通過@Async注解來標(biāo)識(shí)異步方法,讓方法能夠在異步線程中執(zhí)行,本文就來介紹一下,感興趣的可以了解一下
    2023-11-11
  • 圖文詳解Java的反射機(jī)制

    圖文詳解Java的反射機(jī)制

    反射就是Reflection,Java的反射是指程序在運(yùn)行期可以拿到一個(gè)對(duì)象的所有信息。反射機(jī)制是框架的靈魂,一個(gè)java程序員不能不會(huì)使用反射,本文就來和大家一起詳細(xì)聊聊Java的反射機(jī)制
    2022-08-08
  • CentOS 7下JDK8的詳細(xì)安裝步驟

    CentOS 7下JDK8的詳細(xì)安裝步驟

    這篇文章主要為大家介紹了CentOS 7下JDK8的詳細(xì)安裝步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 配置hadoop環(huán)境mapreduce連接不上hdfs解決

    配置hadoop環(huán)境mapreduce連接不上hdfs解決

    這篇文章主要為大家介紹了配置hadoop環(huán)境mapreduce連接不上hdfs解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Spring Security結(jié)合JWT的方法教程

    Spring Security結(jié)合JWT的方法教程

    這篇文章主要給大家介紹了關(guān)于Spring Security結(jié)合JWT的方法教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • springboot tomcat的maxHttpFormPostSize參數(shù)示例解析

    springboot tomcat的maxHttpFormPostSize參數(shù)示例解析

    這篇文章主要介紹了springboot tomcat的maxHttpFormPostSize參數(shù)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • java 線程公平鎖與非公平鎖詳解及實(shí)例代碼

    java 線程公平鎖與非公平鎖詳解及實(shí)例代碼

    這篇文章主要介紹了java 線程公平鎖與非公平鎖詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java多線程加鎖以及Condition類的使用實(shí)例解析

    java多線程加鎖以及Condition類的使用實(shí)例解析

    這篇文章主要介紹了java多線程加鎖以及Condition類的使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論