I-Code-Nachricht zu senden, auf dem UDP-Protokoll, das wie unten funktioniert gefunden zu koordinieren.
public class SendUDP extends AsyncTask<Void, Void, String> {
String message;
public SendUDP(String message) {
this.message = message;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void[] params) {
try {
DatagramSocket socket = new DatagramSocket(13001);
byte[] senddata = new byte[message.length()];
senddata = message.getBytes();
InetSocketAddress server_addr;
DatagramPacket packet;
server_addr = new InetSocketAddress(getBroadcastAddress(getApplicationContext()).getHostAddress(), 13001);
packet = new DatagramPacket(senddata, senddata.length, server_addr);
socket.setReuseAddress(true);
socket.setBroadcast(true);
socket.send(packet);
Log.e("Packet", "Sent");
socket.disconnect();
socket.close();
} catch (SocketException s) {
Log.e("Exception", "->" + s.getLocalizedMessage());
} catch (IOException e) {
Log.e("Exception", "->" + e.getLocalizedMessage());
}
return null;
}
@Override
protected void onPostExecute(String text) {
super.onPostExecute(text);
}
}
und unterhalb Funktion für Broadcast-IP-Adresse des Geräts in dem LAN-Netzwerk verbunden ist, durch die das Abrufen alle anderen Geräte in dem LAN diese Nachricht empfangen wird.
public static InetAddress getBroadcastAddress(Context context) throws IOException {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
// handle null somehow
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));
return InetAddress.getByAddress(quads);
}
und dies wird als
new SendUDP("Hello All Device").execute();
Es wirkt wie ein Zauber nach der Ausführung dieses UDP-Nachricht senden!
Vielen Dank @hardillb –