UDP通信

package network;

import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;

/**
 * UDP协议实现通信
 * UDP协议是一种不可靠的网络协议,它在两端各建立一个Socketd对象,但是两个Socker只是发送数据和接收数据,
 * 因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务端的概念
 * Java提供了 DatagramSocket 类作为基于UDP协议的Socket实现功能
 */
public class UdpDemo {
    public static void main(String[] args) {

    }

    /**
     * UDP发送数据步骤:
     * 1、创建发送端的Socket对象(DatagramSocket)
     * 2、创建数据,并把数据打包
     * 3、调用DatagramSocket对象的方法发送数据
     * 4、关闭发送端
     * @throws IOException
     */
    public static void send() throws IOException {
        //创建发送对象
        DatagramSocket datagramSocket = new DatagramSocket();//"192.168.3.14"

        //创建数据,并打包数据
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
        byte[] bytes = "你好455454".getBytes(StandardCharsets.UTF_8);//发送数据
        InetAddress address = InetAddress.getByName("192.168.3.14");//发送IP
        int port = 10086;//端口

        DatagramPacket dp = new DatagramPacket(bytes, bytes.length,address,port);
        //调用发送方法 send(DatagramPacket p)
        datagramSocket.send(dp);
        //关闭资源
        datagramSocket.close();
    }

    /**
     * UPD接收数据:
     * 1、创建接收端的Socket对象(DatagramSocket)
     * 2、创建一个数据包,用于接收数据
     * 3、调用DatagramSocket对象方法接收数据
     * 4、解析数据包、并把数据在控制台显示
     * 5、关闭接收端
     * @throws IOException
     */
    public static void receive() throws IOException {
        //创建接收对象
        int port = 10086;        //指定端口
        DatagramSocket datagramSocket = new DatagramSocket(port);

        //创建数据包,接收数据
        byte[] bytes = new byte[1024];
        //调用DatagramSocket对象方法接收数据
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        datagramSocket.receive(dp);
        //解析数据
        byte[] data = dp.getData();
        int len = dp.getLength();
        String s = new String(data,0,len);//将数据转换成String
        System.out.println(s);
        //关闭
        //datagramSocket.close();
    }
}

添加新评论