java网络编程day03

UDP编程

  1. 没有明确的服务器端和客户端,眼变成数据的发送端和接受端
  2. 数据接受和发送是通过DatagramPacket对象(包含数据ip和端口)完成的
  3. 将数据封装成DaragramPacket对象传输(装包/拆包)
  4. 可以指定在哪个端口接受数据

完成功能:B给A发送今晚吃火锅吗?A回好的!

操作步骤:

  1. 创建一个DatagramSocket对象,在xxxx端口接受数据
  2. 构建一个DatagramPacket对象,作为数据传输对象
  3. 调用socket.receive(packet)和socket.send(packet)方法,将数据传到DatagramPacket对象packer中,或者将数据接收到packet中
  4. 可以用过packet.getData(),packet.getLength()方法将数据包拆包
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //创建一个DatagramSocket对象,在9999端口接受数据
        DatagramSocket socket = new DatagramSocket(9999);
        //构建一个DatagramPacket对象
        //在前面讲UDP协议时将过,UDP协议数据传输每个数据包最大64k
        byte[] buf = new byte[64];
        DatagramPacket packet = new DatagramPacket(buf,  buf.length);
        //调用方法,将通过网络传输的Datagrampacket对象填充到packet对象中
        //当有数据包发送到9999端口是就会接受到数据到packet中,如果没有数据,就会等待阻塞在这,一直等
        System.out.println("等待接受数据");
        socket.receive(packet);
        System.out.println("已接收到数据");

        //可以吧packet进行拆包,取出数据,并显示
        int length = packet.getLength();//实际接收到的长度
        byte[] data = packet.getData();//接受到的数据

        System.out.println("接收到的内容为:——————————————————》" + new String(data, 0, length));
        byte[] d = "好的`````".getBytes();
        DatagramPacket packet1 = new DatagramPacket(d, 0, d.length, InetAddress.getLocalHost(), 9998);
        socket.send(packet1);
        System.out.println("A端退出");
    }
}

public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象,准备在9998端口,接受数据
        DatagramSocket socket = new DatagramSocket(9998);
        //将需要接受的数据封装到DatagramPacket对象中
        byte[] data = "hello world".getBytes();
        //对方主机ip,数据数组,数组长度
        DatagramPacket packet = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 9999);
        socket.send(packet);

        //下面开始接受数据
        socket.receive(packet);
        int length = packet.getLength();
        byte[] data1 = packet.getData();
        System.out.println(new String(data1, 0, length));
        socket.close();
        System.out.println("B端退出");
    }
}
posted @ 2022-03-23 00:39  ふじさんのゆき  阅读(25)  评论(0编辑  收藏  举报