UDP Antwort dekodieren

Fohnbit

Top Contributor
Hallo!

Ich erhalte per UDP ein Packet mit dem Inhalt einer Hex Zeichenfolge:
5A4C01C0A80045FFFFFF00C0A80001C0A8010401F61064003838383838383838383828685911333B04575344455630303031000003051400000500000001000000C0A800FE3139322E3136382E312E34006473703D343139362669706D3D30266264000106005000010045BEE65A4C010000050600000904000000000A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Ich habe das Byte Array in eine Hexzeichenfolge geändert:
Java:
clientSocket.receive(receivePacket);
                String modifiedSentence = new String(receivePacket.getData());
                System.out.println("FROM SERVER:" + modifiedSentence);

                char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
                char[] hexChars = new char[receivePacket.getData().length * 2];
                for (int j = 0; j < receivePacket.getData().length; j++) {
                    int v = receivePacket.getData()[j] & 0xFF;
                    hexChars[j * 2] = HEX_ARRAY[v >>> 4];
                    hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
                }
                System.out.println(new String(hexChars));

Nun ist an Position 21 in dem String eine IP Adresse:
C0A80001
das ergibt:
192 168 0 1

Wie kann ich das in einen String wandeln?


Danke
 

Robert Zenz

Top Contributor
Uff, du hast dich da ein biszchen verrannt. Du bekommst binaere Daten als Antwort, also quasi sowas:

Java:
byte[] responseData = new byte[] { 1, 2, 3, 4, ... };

Und daraus kannst du dann deine IP Adresse beziehen, eine Umwandlung in einen String ist absolut nicht notwendig. Eher sowas:

Java:
int IP_ADDRESS_OFFSET = 11;

byte[] receivedData = receivePaket.getData();
int[] ipAddressBytes = new int[] {
        receivedData[IP_ADDRESS_OFFSET + 0] & 0xff,
        receivedData[IP_ADDRESS_OFFSET + 1] & 0xff,
        receivedData[IP_ADDRESS_OFFSET + 2] & 0xff,
        receivedData[IP_ADDRESS_OFFSET + 3] & 0xff };

String ipAddress = Integer.toString(ipAddressBytes[0])
        + "."
        + Integer.toString(ipAddressBytes[1])
        + "."
        + Integer.toString(ipAddressBytes[2])
        + "."
        + Integer.toString(ipAddressBytes[3]);

System.out.println(ipAddress);
 

KonradN

Super-Moderator
Mitarbeiter
In Ergänzung zu Robert: Generell könnte man hier auch die Klassen vom Java Framework nehmen. Da wäre Inet4Adress zu nennen mit
Java:
        InetAddress address = Inet4Address.getByAddress(new byte[] {(byte)0xC0, (byte)0xA8, 0x00, 0x1});
        System.out.println(address.getHostAddress());

Da natürlich die 4 Bytes, die Du aus dem UDP Paket gelesen hast, verwenden. Ich habe hier einfach nur einmal die gegebenen Beispiel-Daten als Literale eingefügt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W GET Anfrage resultiert in unendlicher Antwort Java Basics - Anfänger-Themen 1
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
K Unerwartete Antwort Java Basics - Anfänger-Themen 1
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
Koookie Kleines Frage - Antwort Programm (Anfänger) Java Basics - Anfänger-Themen 5
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
C Warten auf Antwort Java Basics - Anfänger-Themen 22
B Frage Antwort Java Basics - Anfänger-Themen 13
M Aus CSV-Datei lesen und anzeigen (bitte schnell um Antwort) Java Basics - Anfänger-Themen 6
J Leichte Java Anfängerfrage. Bitte schnelle Antwort. :) Java Basics - Anfänger-Themen 10
C Antwort header anzeigen Java Basics - Anfänger-Themen 5
G Ausg. in JSP erzeugen die als Antwort an Client gesch. wird Java Basics - Anfänger-Themen 2
M Sockets. Bekomm keine Antwort vom Server. Java Basics - Anfänger-Themen 7
E Hash Code dekodieren? Java Basics - Anfänger-Themen 20
Z Dekodieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben