# Zuweisen einer InetAddress mit einem byte



## VdA (22. Sep 2006)

Hallo!
ich Programmiere ein chat Programm für das ich eine Mysql datenbank benutze und habe das problem, dass ich eine IP-Adresse die eingespeichert ist einer InetAddress zuweisen will mit der Methode:


```
InetAddress.getByAddress(byteIP);
```

die ein byte-array erwartet.
Wie wir alle wissen hat ein byte den Wertebereich von -128 bis +127 jedoch hab ich eine IP eingespeichert, die *83.169.146.177* lautet und da die zahlen 166, 146 und 177 alle über 127 sind gibt das bei mir folgende Exception aus:

java.lang.NumberFormatException: Value out of range. Value:"169" Radix:10

weiß jemand wie ich der inetAddres irgendwie anders einen festen Wert aus der datenbank zuweisen kann?
 :bahnhof:


----------



## mlux (23. Sep 2006)

Hi,

wie weist du denn dem byteIP-Array die Werte zu?


----------



## Guest (23. Sep 2006)

Ich habe ein actionEvent ausgelöst bekommen das mir den namen eines benutzers liefert der in der Datenbank mit seiner Aktuellen IP drinsteht. 
Dann benutze ich ein PHP script um die Datenbank nach der IP zu fragen, die als String in der Datenbank gespeichert ist. Das funktioniert alles wunderbar. Doch wenn ich dann folgendes mache, gibt er mir oben gennante Exception aus:


```
//i
byte[] byteIP = new byte[4];
String empfang;
/*
      Hier wird die Datenbank abgefragt.
      Das Ergebnis wird in empfang gespeichert.
      Das wäre z.B.  "83.169.146.177"

*/
java.util.StringTokenizer st = new java.util.StringTokenizer(empfang, ".");
			for(int i=0; i<4;i++)
			{
				byteIP[i]=Byte.parseByte(st.nextToken());   //Hier soll er die Zahlen Nacheinander voneinander trennen
                                                        // dabei gibt es die NumberFormatException
			}
			address=InetAddress.getByAddress(byteIP);
```


----------



## mlux (23. Sep 2006)

das sollte funktionieren .. erst das jeweilige byte als int parsen und dann als byte casten. so bekommst du auch gleich ein unsigned byte als ergebnis.


```
byteIP[i]=(byte)Integer.parseInt(st.nextToken());
```


----------



## VdA (23. Sep 2006)

das funktioniert aber nur wenn man eine zahl hat die zwischen -128 und +127 liegt.
Wenn sie über 127 liegt kommt dementsprechend eine zahl raus die im negativen bereich liegt.


Aber ich glaub ich habe grade eine Andere Lösung gefunden man kann nähmlich mit 

```
InetAddress address =InetAddress.getByName(empfang); //empfang ist immernoch die IP als String
```
die IP zuweisen. Diese funktion ist ein Bischen irreführend, weil es heißt man soll hier den Namen des Host angeben, funzt aber auch mit der IP als String.
Muss aber noch testen ob ich jetzt auch an diese IP DatagramPackets senden kann.


----------



## mlux (24. Sep 2006)

wie schon erwähnt, funktioniert die methode


```
byteIP[i]=(byte)Integer.parseInt(st.nextToken());
```

auch. Durch den Cast, bekommst du in das byte auch Werte größer 127 rein. (Ich habs ausprobiert )

Die Lösung mit getByName() ist bestimmt besserer und schneller aber trotzdem würde es mich interessieren, warum man durch einen Cast quasi ein unsigned byte bekommt. Vielleicht weiß jemand die Hintergründe.


----------

