How to broadcast a UDP packet from Android?

Viewed 1511

I need to broadcast a message using UDP from my Android app to every device on my network (ethernet). I'm lost on how to do this though because there doesn't seem to be any documentation on how to send a broadcast message, just ones on how to send to a specific client using IP addresses.

Thanks

1 Answers

here is a useful doc:

google-AdroidUDP

and here is a sample code:

1- sender

 public void sendBroadcast(String messageStr) {
 StrictMode.ThreadPolicy policy = new   StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

try {

  DatagramSocket socket = new DatagramSocket();
  socket.setBroadcast(true);
  byte[] sendData = messageStr.getBytes();
  DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, getBroadcastAddress(), Constants.PORT);
  socket.send(sendPacket);
  System.out.println(getClass().getName() + "Broadcast packet sent to: " + getBroadcastAddress().getHostAddress());
} catch (IOException e) {
  Log.e(TAG, "IOException: " + e.getMessage());
}
}
 InetAddress getBroadcastAddress() throws IOException {
 WifiManager wifi = (WifiManager)    mContext.getSystemService(Context.WIFI_SERVICE);
 DhcpInfo dhcp = wifi.getDhcpInfo();


int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
  quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
return InetAddress.getByAddress(quads);

}

2- receiver:

      try {
      socket = new DatagramSocket(Constants.PORT, InetAddress.getByName("0.0.0.0"));
 socket.setBroadcast(true);

while (true) {
Log.i(TAG,"Ready to receive broadcast packets!");

byte[] recvBuf = new byte[15000];
DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
socket.receive(packet);

Log.i(TAG, "Packet received from: " + packet.getAddress().getHostAddress());
String data = new String(packet.getData()).trim();
Log.i(TAG, "Packet received; data: " + data);

Intent localIntent = new Intent(Constants.BROADCAST_ACTION)
        .putExtra(Constants.EXTENDED_DATA_STATUS, data);
LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);
    }
    }  catch (IOException ex) {
    Log.i(TAG, "Oops" + ex.getMessage());
    }
Related