02 UDP通信

02 UDP通信


一、UDP发送数据的步骤

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

二、UDP接收数据的步骤

  1. 创建接收端的DatagramSocket对象,端口号和发送端一样
  2. 创建DatagramPacket接收数据
  3. 调用DatagramSocket发送数据
  4. 解析资源
  5. 释放资源

三、UDP的三种通信方式

  1. 单播
  2. 组播
    1. 局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。
    2. 预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。
    3. 管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。
  3. 广播
    广播地址:255.255.255.255

四、单播实例

发送数据端:

import java.io.IOException;
import java.net.*;

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //1. 创建发送端的DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        //2. 创建数据并把数据打包
        String str="hello world !";
        byte[] bytes = str.getBytes();
        DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("127.0.0.1"),10000);
        //3. 调用DatagramSocket发送数据
        socket.send(packet);
        //4. 释放资源
        socket.close();
    }
}

接收数据端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        //1. 创建接收端的DatagramSocket对象,端口号和发送端一样
        DatagramSocket socket = new DatagramSocket(10000);
        //2. 创建DatagramPacket接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
        //3. 调用DatagramSocket发送数据
        socket.receive(packet);
        //4. 解析资源
        byte[] data = packet.getData();
        int length=packet.getLength();
        String str = new String(data,0,length);

        //5. 释放资源
        socket.close();

        System.out.print("接收的资源是:" + str);
    }
}

五、组播实例

发送数据端

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

public class ServerDemo2 {
    public static void main(String[] args) throws IOException {
        //1. 创建发送端的DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        //2. 创建数据并把数据打包
        String str = "组播数据:hello world !";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("224.0.1.1");
        int port = 10000;
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);
        //3. 调用DatagramSocket发送数据
        socket.send(packet);
        //4. 释放资源
        socket.close();
    }
}

接收数据端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ClientDemo2 {
    public static void main(String[] args) throws IOException {
        //1. 创建接收端的 MulticastSocket 对象,端口号和发送端一样
        MulticastSocket ms = new MulticastSocket(10000);
        //2. 把当前计算机绑定一个组播地址,表示添加到这一组中
        ms.joinGroup(InetAddress.getByName("224.0.1.1"));

        //3. 创建DatagramPacket接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);

        //4. 调用DatagramSocket发送数据
        ms.receive(packet);

        //5. 解析资源
        int length=packet.getLength();
        String str = new String(bytes,0,length);

        //6. 释放资源
        ms.close();

        System.out.print("接收的广播数据:" + str);
    }
}

六、广播实例

发送数据端

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

public class ServerDemo1 {
    public static void main(String[] args) throws IOException {
        //1. 创建发送端的DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        //2. 创建数据并把数据打包
        String str = "广播数据:hello world !";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("255.255.255.255");
        int port = 10000;
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);
        //3. 调用DatagramSocket发送数据
        socket.send(packet);
        //4. 释放资源
        socket.close();
    }
}

接收数据端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ClientDemo1 {
    public static void main(String[] args) throws IOException {
        //1. 创建接收端的DatagramSocket对象,端口号和发送端一样
        DatagramSocket socket = new DatagramSocket(10000);
        //2. 创建DatagramPacket接收数据
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
        //3. 调用DatagramSocket发送数据
        socket.receive(packet);
        //4. 解析资源
        int length=packet.getLength();
        String str = new String(bytes,0,length);

        //5. 释放资源
        socket.close();

        System.out.print("接收的广播数据:" + str);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值