Java网络编程之UDP网络通信详解

 更新时间:2022年09月23日 15:29:01   作者:兴趣使然黄小黄  
这篇文章主要为大家详细介绍了Java网络编程中的UDP网络通信的原理与实现,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下

1.UDP网络通信编程原理

1.1 UDP网络通信编程介绍

类 DatagramSocket 何 DatagramPacket(数据包/数据报) 实现了基于 UDP协议网络程序;

UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP数据报一定能够安全送达目的地,也不确定什么时候可以抵达;

DatagramPacket 对象封装了 UDP数据报,在数据报中包含了发送端IP地址和端口号,以及接收端的IP地址和端口号;

UDP协议中每个数据报都给出了完整的地址信息,因此无法建立发送方与接收方的连接。

没有明确的服务端和客户端,演变成数据的发送端和接收端;

接收数据和发送数据都是通过 DatagramSocket 对象完成。

1.2 UDP网络通信编程的基本流程

核心的两个类/对象,DatagramSocket与DatagramPacket;

建立发送端和接收端;

建立数据包;

调用DatagramSocket的发送和接收方法;

关闭DatagramSocket。

2.UDP网络通信编程案例

1.编写一个接收端A,一个发送端B;

2.接收端在 9999端口等待接收数据(receive);

3.发送端向接收端发送数据:“你好!接收端”;

4.接收端接收到发送端的数据后,回复:“你好!发送端”,再退出;

5.发送端接收回复的数据,退出。

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.创建一个DatagramSocket对象,准备在9999接收数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2.构建一个DatagramPacket对象,准备接收数据
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.调用接收方法,将通过网络传输的 DatagramPacket对象 填充到 packet对象
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);
        //4.把packet进行拆包,取出数据
        int length = packet.getLength();//实际数据字节长度
        byte[] data = packet.getData();//实际接收的数据
        String s = new String(data, 0, length);
        System.out.println(s);

        //回复信息给B端
        data = "你好!发送端".getBytes();
        packet = new DatagramPacket(data, 0, data.length,
                InetAddress.getLocalHost(), 9998);
        socket.send(packet);
        //5.关闭资源
        socket.close();
    }
}

UDPSenderB

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

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 发送端B
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //1.创建 DatagramSocket 对象,准备在9998发送和接收数据
        DatagramSocket socket = new DatagramSocket(9998);
        //2.将需要发送的数据,封装到 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();//实际数据字节长度
        data = datagramPacket.getData();//实际接收的数据
        String s = new String(data, 0, length);
        System.out.println(s);
        //关闭资源
        socket.close();
    }
}

到此这篇关于Java网络编程之UDP网络通信详解的文章就介绍到这了,更多相关Java UDP网络通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈spring DI 依赖注入方式和区别

    浅谈spring DI 依赖注入方式和区别

    Spring框架对Java开发的重要性不言而喻,本文主要介绍了spring DI 依赖注入方式和区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java基础之super关键字浅析

    Java基础之super关键字浅析

    java中的super关键字是一个引用变量,用于引用直接父类对象,下面这篇文章主要给大家介绍了关于Java基础之super关键字的相关资料,需要的朋友可以参考下
    2022-04-04
  • SpringBoot中@EnableAsync和@Async注解的使用小结

    SpringBoot中@EnableAsync和@Async注解的使用小结

    在SpringBoot中,可以通过@EnableAsync注解来启动异步方法调用的支持,通过@Async注解来标识异步方法,让方法能够在异步线程中执行,本文就来介绍一下,感兴趣的可以了解一下
    2023-11-11
  • 图文详解Java的反射机制

    图文详解Java的反射机制

    反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。反射机制是框架的灵魂,一个java程序员不能不会使用反射,本文就来和大家一起详细聊聊Java的反射机制
    2022-08-08
  • CentOS 7下JDK8的详细安装步骤

    CentOS 7下JDK8的详细安装步骤

    这篇文章主要为大家介绍了CentOS 7下JDK8的详细安装步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 配置hadoop环境mapreduce连接不上hdfs解决

    配置hadoop环境mapreduce连接不上hdfs解决

    这篇文章主要为大家介绍了配置hadoop环境mapreduce连接不上hdfs解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Spring Security结合JWT的方法教程

    Spring Security结合JWT的方法教程

    这篇文章主要给大家介绍了关于Spring Security结合JWT的方法教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • springboot tomcat的maxHttpFormPostSize参数示例解析

    springboot tomcat的maxHttpFormPostSize参数示例解析

    这篇文章主要介绍了springboot tomcat的maxHttpFormPostSize参数示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • java 线程公平锁与非公平锁详解及实例代码

    java 线程公平锁与非公平锁详解及实例代码

    这篇文章主要介绍了java 线程公平锁与非公平锁详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • java多线程加锁以及Condition类的使用实例解析

    java多线程加锁以及Condition类的使用实例解析

    这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论