JAVA实现收发UDP请求

😂 这篇文章最后更新于1186天前,您需要注意相关的内容是否还可用。

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

发送

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

/*
 * 实现UDP协议的发送端:
 *     实现封装数据的类 java.net.DatagramPacket 将你的数据包装
 *     实现数据传输类    java.net.DatagramSocket 将数据包发出去
 *
 *    实现步骤:
 *        1.创建DatagramPacket对象,封装数据,接收的地址和端口
 *        2.创建DatagramSocket对象,
 *        3.调用DatagramSocket类的方法send,发送数据包
 *        4.关闭资源
 *
 *    DatagramPacket构造方法:
 *        DatagramPacket(byte[] buf,int length,InetAddress address,int port)
 *
 *    DatagramSocket构造方法:
 *        DatagramSocket()空参数
 *        方法:send(DatagramPacket d)
 *
 *
 */
public class UDPSendTest {
    public static void main(String[] args) throws Exception {
//创建发送端Socket对象
        DatagramSocket ds = new DatagramSocket();
//创建数据并打包
        String s = "My name is happywindman";
        byte[] bytes = s.getBytes();
        int length = s.length();
        InetAddress ip = InetAddress.getByName("127.0.0.1");//根据自己主机的ip地址或者主机名
        int port = 10086;
        DatagramPacket dp = new DatagramPacket(bytes, length, ip, port);
//发送数据
        ds.send(dp);
//释放资源
        ds.close();
    }
}

接收

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

/*
 *     实现UDP接收端
 *         实现封装数据包java.net.DatagramPacket 将数据接收
 *         实现输出传输    java.net.DatagramSocket 接受数据包
 *
 *     实现步骤:
 *         1.创建DatagramSocket对象,绑定端口号
 *               要和发送数据端口号一致
 *         2.创建字节数组,接受发来的数组
 *         3.创建数据包对象DatagramPacket
 *         4.调用DatagramSocket对象方法 receive(DatagramPacket dp)
 *               接受数据,数据放在数据包中
 *         5.拆包
 *                 发送的IP地址
 *                  数据包对象DatagramPacket()方法getAddress()获取的是发送端的IP地址对象
 *                 接受到的字节个数
 *                  数据包对象DatagramPacket()方法getLength()
 *                 发送方的端口号
 *              数据包对象DatagramPacket()方法getPort()
 *         6.关闭资源
 */
public class UDPReceiveTest {
    public static void main(String[] args) throws Exception {
//创建接收端Socket对象
        DatagramSocket ds = new DatagramSocket(10086);
//接收数据
        byte[] bytes = new byte[1024];
        int length = bytes.length;
        DatagramPacket dp = new DatagramPacket(bytes, length);
        ds.receive(dp);
        //解析数据 获取地址 带斜杠
        InetAddress address = dp.getAddress();
        //获取发送端的IP地址对象
        String ip = address.getHostAddress();
        //获取发送的端口号
        int port = dp.getPort();
        byte[] data = dp.getData();
        int len = dp.getLength();
//输出数据
//        System.out.println(address);
        System.out.println(String.format("发送方地址:%s:%s", ip, port));
        System.out.println(new String(data, 0, len));
        System.out.println(new String(bytes, 0, len));
        ds.close();
    }
}