我需要在网络中发送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带来哪些变化。
答案 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,则侦听该多播组地址的任何客户端都将收到您的数据包。