Cześć, dopadł mnie problem z kodowaniem znaków. Używam pewnego protokołu do komunikacji z zewnętrznym urządzeniem po UDP. Celem wyszukania urządzeń w lokalnej sieci wysyłam pakiet o o treści <AK-NORD><PING>
na adres rozgłoszeniowy sieci. Ponieważ socket używa tego samego portu, na którym nasłuchują urządzenia również odbiera ten komunikat. Te wysłane przez siebie samego komunikaty odfiltrowuję prostym ifem, inne przetwarzam, kod wygląda w przybliżeniu tak:
for (InterfaceAddress ia : validAddresses) {
socket = new DatagramSocket(54321, ia.getAddress());
String request = "<AK-NORD><PING>";
packet = new DatagramPacket(request.getBytes(), request
.getBytes().length, ia.getBroadcast(), 54321);
socket.send(packet);
socket.setSoTimeout(4000);
byte[] buffer = new byte[1500];
while (true) {
packet = new DatagramPacket(buffer, buffer.length);
try {
socket.receive(packet);
} catch (SocketTimeoutException e) {
break;
}
if (new String(packet.getData(), 0, packet
.getLength()).equals("<AK-NORD><PING>")) {
continue;
}
// kod przetwarzający dane z otrzymanego pakietu
}
}
I wszystko działało pięknie na wszystkich maszynach, na których było sprawdzane. Az do momentu sprawdzenia na komputerze z niemieckim windowsem (o ile to ma znaczenie). Tam, jako odpowiedź dostaję <AËNORD><PING>
. Próbowałem kodować tego Stringa do tablicy bajtów i odkodowywać z użyciem różnych kodowań ale nie udało mi się odtworzyć tego efektu. Łącznik pomiędzy K i N to znak o kodzie 0x2D (dywiz).
Jakieś pomysły?