I'm trying to send and receive UDP broadcast messages.
At the beginning it didn't work, but after I found out that I had to use a wildcard address on the receiver side (0.0.0.0). So it worked.
But I would like to understand why do I have to use a wildcard address? It binds to all network interfaces, isn't there a way to bind to a specific address and still continuing to receive broadcast?
Sender
InetAddress localHOst = InetAddress.getByName("192.168.1.1");
DatagramSocket socket = new DatagramSocket(50000, localHost);
socket.setBroadcast(true);
byte[] data = msg.getBytes();
InetAddress dest = InetAddress.getByName("192.168.255.255");
DatagramPacket packet = new DatagramPacket(data, data.length, dest, 49152);
socket.send(packet);
socket.close();
Receiver
InetAddress broadcastWildcard = InetAddress.getByName("0.0.0.0");
DatagramSocket socket = new DatagramSocket(49152, broadcastWildcard);
byte[] data = null;
while(true) {
data = new byte[Settings.MSG_SIZE];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
}