Grüße, ich bin neu hier und habe eine frage.
Ich Arbeit derzeit an einem einfachen Modul, dass auf Broadcast-Nachrichten antwortet und selbst welche abschickt.
Momentan ist es wie folgt aufgebaut:
Prozess 1:
Schleife:
-Zuhören / Warten
-Antworten auf Sendeadresse
Prozess 2:
Button Event:
-Broadcast Abschicken
Dies soll alles auf den Port 15000 geschehen.
Eine eigentlich eine einfache Geschichte, habe ich auch schon in dotNet umgesetzt und funktionierte.
Nur habe ich in Java meine Probleme. (Bin auch kein Java Spezialist)
Mein Problem liegt beim Prozess 2. Ich bekomme diesen Fehler: android.os.NetworkOnMainThreadException.
Meine frage ist, wie löst man dieses Problem?
Ist das ein Plattform bedingtes Problem?
Die Umsetzung gilt hier für Android und soll dann auch für Linux verwendet werden.
Ich hoffe Ihr könnt mir helfen.
MfG
Ich Arbeit derzeit an einem einfachen Modul, dass auf Broadcast-Nachrichten antwortet und selbst welche abschickt.
Momentan ist es wie folgt aufgebaut:
Prozess 1:
Schleife:
-Zuhören / Warten
-Antworten auf Sendeadresse
Prozess 2:
Button Event:
-Broadcast Abschicken
Dies soll alles auf den Port 15000 geschehen.
Eine eigentlich eine einfache Geschichte, habe ich auch schon in dotNet umgesetzt und funktionierte.
Nur habe ich in Java meine Probleme. (Bin auch kein Java Spezialist)
Mein Problem liegt beim Prozess 2. Ich bekomme diesen Fehler: android.os.NetworkOnMainThreadException.
Meine frage ist, wie löst man dieses Problem?
Ist das ein Plattform bedingtes Problem?
Die Umsetzung gilt hier für Android und soll dann auch für Linux verwendet werden.
Ich hoffe Ihr könnt mir helfen.
MfG
Java:
private static final int PORT = 15000;
private final HashMap<String, Request> messages;
private final String deviceName;
private final Thread listener = new Thread(this);
private DatagramSocket udpSocket = null;
private boolean state = true;
public EchoServer() {
messages = new HashMap<>();
deviceName = Build.MODEL;
try {
udpSocket = new DatagramSocket(PORT);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void run() {
String msg;
try {
while (state) {
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
udpSocket.receive(packet);
msg = new String(packet.getData()).trim();
if (!msg.equals(deviceName)) {
if (!messages.containsKey(msg) || Objects.requireNonNull(messages.get(msg)).address != packet.getAddress()) {
Request request = new Request();
request.address = packet.getAddress();
request.interfaceAddress = packet.getSocketAddress();
request.client = msg;
request.time = new Date().getTime();
if (messages.containsKey(msg)) {
messages.replace(msg, request);
} else {
messages.put(msg, request);
}
}
System.out.print(msg);
String data = "aw:" + deviceName;
byte[] dataByte = data.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(dataByte,dataByte.length,packet.getAddress(),PORT);
udpSocket.send(datagramPacket);
}
}
} catch (IOException e) {
e.printStackTrace();
state = false;
}
}
public void sendRequest(){ //<---------------------------- ausgelöst durch Prozess 2-------------------------------
byte[] dataByte = deviceName.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(dataByte,dataByte.length);
try {
datagramPacket.setAddress(InetAddress.getByName("255.255.255.255"));
udpSocket.send(datagramPacket);
} catch (Exception e) {
e.printStackTrace();
}
}