【JAVA】UDP通信

目录

 1.【UDP通信】

1.1【UDP发送数据】

1.2【UDP接收数据】

1.3【UDP通信——示例项目】

2.【UDP的三种通信方式】

2.1【单播】

2.2【组播】

2.2.1【组播地址】

2.2.2【发送端】

2.2.3【接收端】

2.3【广播】

2.3.1【组播地址】

2.3.2【发送端】

2.3.3【接收端】


 1.【UDP通信】

1.1【UDP发送数据】

【构造方法】:

DatagramSocket():构造一个数据报套接字并将其绑定到本地主机上的任何可用端口。

DatagramPacket(byte[] buf, int length, InetAddress address, int port):创建一个数据包,发送长度为length的数据包到指定主机上的指定端口号

【成员方法】:

void send(DatagramPacket p):从此套接字发送数据包

void close():关闭此数据套接字

【步骤】:

  1. 创建发送端的DatagramSocket对象
  2. 创建数据,并把数据打包(DatagramPacket)
  3. 调用DatagramSocket对象的方法发送数据
  4. 释放资源

例:

        DatagramSocket ds=new DatagramSocket();
        String s="送的礼物";
        byte[] bytes=s.getBytes();
        InetAddress address=InetAddress.getByName("127.0.0.1");
        int port=10000;
        DatagramPacket dp=new DatagramPacket(bytes, bytes.length,address,port);
        ds.send(dp);
        ds.close();

1.2【UDP接收数据】

【构造方法】:

DatagramSocket(int port):构造一个数据报套接字并将其绑定到本地主机上的指定端口。

DatagramPacket(byte[] buf, int length):构造一个DatagramPacket用于接收长度为length的数据包

【DatagramSocket成员方法】:

void receive(DatagramPacket p):从此套接字接收数据包

void close():关闭此数据套接字

【DatagramPacket成员方法】:

byte[ ] getData():返回数据缓冲区

int getLength():返回要发送的数据的长度或要接收的数据的长度

【步骤】:

  1. 创建接收端的DatagramSocket对象
  2. 创建一个箱子,用于接收数据
  3. 调用DatagramSocket的方法接收数据并将数据放入箱子中
  4. 解析数据包,并把数据在控制台显示
  5. 释放资源

例:

        DatagramSocket ds=new DatagramSocket(10000);
        byte[] bytes=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
        ds.receive(dp);
        //byte[] data=dp.getData();
        int length = dp.getLength();
        System.out.println(new String(bytes,0,length));
        ds.close();

1.3【UDP通信——示例项目】

简易的聊天室

//发送端
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        DatagramSocket ds = new DatagramSocket();
        while (true) {
            String s = sc.next();
            if ("886".equals(s)) {
                break;
            }
            byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
            InetAddress address = InetAddress.getByName("127.0.0.1");
            int port = 10000;
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
            ds.send(dp);
        }
        ds.close();
    }
//接收端
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10000);
        while (true){
            byte[]bytes=new byte[1024];
            DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
            ds.receive(dp);
            byte[] data = dp.getData();
            int length = dp.getLength();
            System.out.println(new String(bytes,0,length));
        }

2.【UDP的三种通信方式】

2.1【单播】

同【UDP通信】

2.2【组播】

2.2.1【组播地址】

224.0.0.0 ~ 239.255.255.255(其中224.0.0.0 ~ 224.0.0.255 为预留的组播地址,不能使用)

2.2.2【发送端】

【步骤】:

  1. 创建发送端的Socket对象(DatagramSocket)
  2. 创建数据,并把数据打包(DatagramPacket)
  3. 调用DatagramSocket对象的方法发送数据
  4. 释放资源

【注意】:

在组播中第三步发送数据,是发给组播地址

例:

    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();
        String s = "组播Hello";
        byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
        InetAddress address = InetAddress.getByName("224.0.1.0");
        int port = 10000;
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
        ds.send(dp);
        ds.close();
    }

2.2.3【接收端】

【步骤】:

  1. 创建接收端的Socket对象(MulticastSocket)
  2. 创建一个箱子,用于接收数据
  3. 把当前电脑添加到这个组中(joinGroup方法)
  4. 调用DatagramSocket的方法接收数据并将数据放入箱子中
  5. 解析数据包,并把数据在控制台显示
  6. 释放资源

例:

    public static void main(String[] args) throws IOException {
        MulticastSocket ms=new MulticastSocket(10000);
        DatagramPacket dp=new DatagramPacket(new byte[1024],1024);
        //把当前计算机绑定一个组播地址,表示添加到这一组中
        ms.joinGroup(InetAddress.getByName("224.0.1.0"));
        ms.receive(dp);
        byte[] data = dp.getData();
        int length = dp.getLength();
        System.out.println(new String(data,0,length));
        ms.close();
    }

2.3【广播】

2.3.1【组播地址】

255.255.255.255

2.3.2【发送端】

【步骤】:

  1. 创建发送端的Socket对象(DatagramSocket)
  2. 创建数据,并把数据打包(DatagramPacket)
  3. 调用DatagramSocket对象的方法发送数据
  4. 释放资源

【注意】:

在广播中第三步发送数据,是发给广播地址

例:

    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();
        String s = "广播Hello";
        byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
        InetAddress address = InetAddress.getByName("255.255.255.255");
        int port = 10000;
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
        ds.send(dp);
        ds.close();
    }

2.3.3【接收端】

【步骤】:

  1. 创建接收端的DatagramSocket对象
  2. 创建一个箱子,用于接收数据
  3. 调用DatagramSocket的方法接收数据并将数据放入箱子中
  4. 解析数据包,并把数据在控制台显示
  5. 释放资源

例:

    public static void main(String[] args) throws IOException {
        MulticastSocket ms=new MulticastSocket(10000);
        DatagramPacket dp=new DatagramPacket(new byte[1024],1024);
        ms.receive(dp);
        byte[] data = dp.getData();
        int length = dp.getLength();
        System.out.println(new String(data,0,length));
        ms.close();
    }
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lx_Hy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值