MulticastSocket 实现UDP组播,为什么多个程序可以绑定一台计算机的同一个端口?

Amelie
  • 81

接收端:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        // 这里绑定到 10000 端口上了
        MulticastSocket ms = new MulticastSocket(10000);

        DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);

        // 把当前计算机绑定一个组播地址,表示添加到这一组中
        ms.joinGroup(InetAddress.getByName("224.0.1.0"));

        ms.receive(dp);

        System.out.println(new String(dp.getData(), 0, dp.getLength()));
        System.out.println(dp.getAddress().getHostAddress());
        System.out.println(dp.getPort());

        ms.close();
    }
}

发送端:

import java.io.IOException;
import java.net.*;
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();

        String s = "hello,组播";
        byte[] bytes = s.getBytes();
        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();
    }
}

不是说同一个端口被一个程序占用时就不能被其他程序占用吗?为什么接收端可以同时多次运行也不报Bind异常呢?

PS.这个程序能正确执行,多开的每个程序都能接收到信息

这是什么原理呢?

回复
阅读 439
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏