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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章