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);
    }
}

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读