2013-05-12 61 views
0

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

所以,我使用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(); 
     } 
    } 
} 

我不能够预测上面的代码是广播或多播。如果是广播,那么我需要为多播做出什么改变。如果多播,那么我需要为Boradcast带来什么变化。

回答

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):

多播地址是到239.255.255.255的范围内 224.0.0.0。

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

+0

应该使用DatagramSocket还是Multicast Socket进行广播,..? – 2013-05-12 21:04:06

+0

DatagramSocket。我不确定如果您使用MulticastSocket进行广播会发生什么情况,但我怀疑它不会做任何希望的事情。 – Brandon 2013-05-12 21:15:07

+0

您可以使用任一方式发送。您必须使用MulticastSocket来接收多播。 – EJP 2013-05-12 23:00:46