当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2023-01-30
目录 1.UDP网络通信编程原理 1.1 UDP网络通信编程介绍 1.2 UDP网络通信编程的基本流程 2.UDP网络通信编程案例 1.UDP网络通信编程原理 1.1 UDP网络通信编程介绍 类 DatagramSocket 何 DatagramPacket(
目录
  • 1.UDP网络通信编程原理
    • 1.1 UDP网络通信编程介绍
    • 1.2 UDP网络通信编程的基本流程
  • 2.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网络通信内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

    上一篇:浅析Java中的动态代理
    下一篇:没有了
    网友评论