1.发送数据

1.步骤

  1. 使用DatagramSocket创建发送端Socket服务对象
  2. .使用DatagramPacket创建数据,将所传递的数据、接收端的IP地址、接收端的端口号进行封装
  3. 调用send方法发送数据
  4. 调用close方法释放资源

DatagramSocket是用来发送和接收数据报包的套接字。DatagramPacket代表需要传输的数据包。

2.示例

public static void main(String[] args){
        try{
            //1.使用DatagramSocket创建发送端Socket服务对象
            DatagramSocket datagramSocket = new DatagramSocket();

            //2.使用DatagramPacket创建数据,并把数据打包
            //2.1 将需要传递的数据变成字节数组,并获取长度
            String str = "Hello, this message send by udp. You can call me Sean";
            byte[] bys = str.getBytes();
            int length = bys.length;
            //2.2 获取到接收端的IP地址
            InetAddress address = InetAddress.getByName("192.168.1.1");
            //2.3获取到接收端的端口号
            int port = 10010;
            //2.4构造DatagramPacket,组成数据包
            DatagramPacket packet = new DatagramPacket(bys, length, address, port);

            //3.发送数据包
            datagramSocket.send(packet);

            //4.释放资源
            datagramSocket.close();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

因为UDP协议不能保证数据一定会被接收到,所以数据丢失也是正确不报错的。

2.接收数据

1.步骤

  1. 使用DatagramSocket创建接收端Socket服务对象
  2. .使用DatagramPacket创建数据包作为接收容器
  3. 调用方法接收数据
  4. 调用方法解析数据包
  5. 调用close方法释放资源

2.示例

    public static void main(String[] args){
        try{
            //1.使用DatagramSocket创建接收端Socket服务对象,并指定端口
            DatagramSocket datagramSocket = new DatagramSocket(10010);

            //2.使用DatagramPacket创建数据包,用于接收
            byte[] bys = new byte[1024];
            int length = bys.length;
            //2.1构造DatagramPacket,组成数据包
            DatagramPacket packet = new DatagramPacket(bys, length);

            //3.接收数据包
            datagramSocket.receive(packet);

            //4.解析数据包
            InetAddress address = packet.getAddress();
            String ip = address.getHostAddress();
            byte[] bytes = packet.getData();
            int l = bytes.length;
            String s = new String(bytes, 0, l);
            String s = new String(bytes);
            System.out.println(ip + "********" + s);

            //5.释放资源
            datagramSocket.close();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

注意:

  • 收发端口要一致
  • 接收端口若正在使用就不能被其他进程使用

results matching ""

    No results matching ""