在多播套接字上接收单播

时间:2014-10-14 23:10:58

标签: java android networking udp multicast

我有一台服务器向192.168.1.101,端口55555发送单播UDP数据包。

我的Android设备有IP 192.168.1.101。我的Android设备有一个绑定在端口55555上的组播套接字,加入了组播组230.1.1.111。

我正在从服务器上的Android的多播套接字上接收数据报。

这有意义吗?组播套接字是否可以接收未发送到它加入的组播组的数据报?

2 个答案:

答案 0 :(得分:2)

  

组播套接字是否可以接收未发送到它加入的组播组的数据报?

是的,它可以。它可以加入零个或多个组播组。这不会影响其单播能力。

答案 1 :(得分:0)

添加以下代码以供参考.. 我们可以在同一个端口接收多播和单播消息。

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class MulticastReceiver {

        public static void main(String[] args) throws Exception {
            int mcPort = 1800;
            String mcIPStr = "239.255.255.250";
            MulticastSocket mcSocket = null;
            InetAddress mcIPAddress = null;
            mcIPAddress = InetAddress.getByName(mcIPStr);
            mcSocket = new MulticastSocket(mcPort);
            System.out.println("Multicast Receiver running at:"
                    + mcSocket.getLocalSocketAddress());
            mcSocket.joinGroup(mcIPAddress);


        boolean var=true;           
        while(var){ 
            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
            System.out.println("Waiting for a  multicast message...");
            mcSocket.receive(packet);

        System.out.println("packet length is " +packet.getLength());


            String msg = new String(packet.getData(),0,1024);
            System.out.println("[Multicast  Receiver] Received:" + msg);
        }
            mcSocket.leaveGroup(mcIPAddress);
            mcSocket.close();


        }
    }