java - DatagramSocket能否接收多播数据包

标签 java android udp broadcast multicast

我有一个在线程中运行的代码,我用它来发送 DatagramPacket 到计算机中每个 NetworkInterface 的广播地址,也发送到多播组。具体如下:

try {
    String decl="Mymessage";
    DatagramPacket ackdp;
    while(true)
        {
        Thread.sleep(3000);
        //First sending multicast (not broadcast) packet to a multicast group
        //231.26.179.75:37486
        ackdp=new DatagramPacket(s.getBytes(),s.length(),multicastGroup,port);
        BroadcastSocket.send(ackdp);
        //Now sending same message to broadcast address of each of the n/w interfaces
        Enumeration nwInterfaces = NetworkInterface.getNetworkInterfaces();
        while(nwInterfaces.hasMoreElements())
                {
                NetworkInterface ni=(NetworkInterface) nwInterfaces.nextElement();
                if(ni.isLoopback()||!ni.isUp())
                        continue;
                for(InterfaceAddress ifa:ni.getInterfaceAddresses())
                        {
                        InetAddress broadcastIP=ifa.getBroadcast();
                        if(broadcastIP==null)
                                continue;
                        ackdp=new DatagramPacket(s.getBytes(),s.length(),broadcastIP,port);
                        BroadcastSocket.send(ackdp);
                        //port is same here :37486 (ip varies with network interface)
                        }
                }
        }
    } catch (Exception ex) {ex.printStackTrace();}

我的问题是:我可以使用相同的 DatagramSocket 接收两个(多播和广播)数据包吗?请注意,两者都发送到同一端口。我应该在端口 37486 上打开 MulticastSocket 还是 DatagramSocket 来接收这两个数据包?

(数据包从 PC 发送但在 Android 上接收)

最佳答案

Can DatagramSocket receive multicast Packets

不能,因为不能加入组播组。

你没有问,但为了完整性:

Can DatagramSocket send multicast Packets

是的。

Can MulticastSocket receive datagram (non-multicast) packets

是的。

关于java - DatagramSocket能否接收多播数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209957/

相关文章:

android - 可绘制作品不正确

android - clearApplicationUserData 最小化应用程序

c# - 为什么我不能得到所有的 UDP 数据包?

java - @after @before 只用了一次,几次@test

Java、Gradle、CI 和指定内存使用限制

android - OnLoadFinished() 调用了两次

java - Arduino 和 Android UDP 数据报

c - 信号报警太快失效

java - socket.getInetAddress().getHostAddress() 奇怪的问题

java - 我如何(静态地)分析 java 代码并提取构造函数或方法中的实际参数值?