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

发布于 2022-09-12 22:49:35 字数 1381 浏览 29 评论 0

接收端:

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.这个程序能正确执行,多开的每个程序都能接收到信息

这是什么原理呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文