java中广播和多播代码的区别

时间:2013-05-12 20:40:32

标签: java sockets

我需要在网络中发送UDP Broadcast。但我感到困惑。我所知道的是广播不是特定于地址的,而多播是特定于组(地址)的。

因此,我正在使用DatagramSocket从网络发送和接收DatagramPackets

我写的代码是:

public class ComputerSender implements Runnable
{
    MulticastSocket socket;
    DatagramPacket packet;
    String command;
    public ComputerSender(String MAC)
    {
        try
        {
            socket = new MulticastSocket();
            JSONManager json = new JSONManager(MAC, WifiConstants.COMPUTER_NET_SCAN);
            json.setRecvMAC(WifiConstants.COMPUTER_NETWORK_ADDR);
            InetAddress addr = InetAddress.getByName(WifiConstants.COMPUTER_NETWORK_ADDR);
            command="Hello";
        }
        catch(Exception e)
        {
            Log.v("Exception:","Computer Constructor Error: "+e.toString());
        }
    }
    @Override
    public void run()
    {
        try
        {
            System.out.println(command);
            packet=new DatagramPacket(command.getBytes(),command.getBytes().length,InetAddress.getByName(WifiConstants.COMPUTER_NETWORK_ADDR), WifiConstants.COMPUTER_SEND_PORT);
            socket.setTimeToLive(100);
            socket.send(packet);
            System.out.println("Packet Sent");
            Thread.sleep(200);
        }
        catch(Exception e)
        {
            Log.v("Packet Sending Error: ","Computer Error: "+e.getMessage());
        }
        finally
        {
            socket.close();
        }
    }
}

我无法预测上述代码适用于广播或多播。如果广播然后我需要做什么更改为多播。如果是Multicast,那么我需要为Boradcast带来哪些变化。

1 个答案:

答案 0 :(得分:2)

取决于WifiConstants.COMPUTER_NETWORK_ADDR的价值。

对于广播,它必须是您网段的广播地址。例如,如果您的IP地址是10.1.2.3,子网掩码为255.255.0.0,则10.1.255.255是广播地址。

但是,多播地址使用多播地址范围内的组地址。

根据IANA(http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml):

  

多播地址在范围内   224.0.0.0至239.255.255.255。

因此,如果目标IP地址在该范围内,例如224.224.1.2,则侦听该多播组地址的任何客户端都将收到您的数据包。