# NIO, DHCP und ein Netzwerkneuling



## microtux (21. Mai 2008)

Hallo!

Bin gerade dabei, eine DHCP-API zu schreiben, um mir den Umgang mit NIO und UDP anzulernen. Ich bin jetzt schon soweit, dass ich Broadcasts empfange und DHCP-Pakete zur Antwort erstellen kann (als ByteBuffer/byte-Array). Nur wie broadcaste ich diesen ByteBuffer jetzt in mein Netz? Mit DatagramChannel.send() und 255.255.255.255:68 als InetSocketAddress spuckt er mir eine Exception (kann leider gerade nicht testen, welche, sobald ich einen 2. pc da hab, poste ichs), genauso bei DatagramChannel.socket().send(). Kann ich diese Methoden überhaupt zum Broadcasten verwenden? Hier mein Code:


```
//Parameter: Host-IP, neue Client-IP und Hostname
ByteBuffer toSend =dhcpPacket.createOfferPacket(new byte[]{(byte) 192, (byte) 168, 0, (byte) 190}, new byte[]{(byte) 192, (byte) 168, 0, (byte) 199}, new byte[64]).toByteBuffer();
//DHCP-Client-Port: 68
getChannel().send(toSend, new InetSocketAddress("255.255.255.0", 68));
```

Vielen Dank schon mal!
MfG microtux


----------



## lhein (21. Mai 2008)

Kleine Verständnisfrage:

Du empfängst einen Broadcast DHCP-Request. Der wurde als Broadcast gesendet, weil der DHCP-Server nicht bekannt ist. Dein DHCP Server versucht, einen Broadcast als Antwort zu senden? Warum? Du kennst doch den Requester-Host oder nicht? (sorry für die dumme Frage, bin in Sachen DHCP Interna nicht wirklich bewandert)

Btw. schau Dich doch mal in fremden Sources um.

Koders

lhe


----------



## Niki (21. Mai 2008)

Das mit den bytes wird nicht funktionieren. Du weißt schon dass ein byte einen Wertebereich von -128 bis 127 hat. Da wirds schwer 192 hinein zu bekommen  :roll:


----------



## Gast (21. Mai 2008)

@lhe: Der Zielhost ist zwar bekannt, nur hat dieser ja noch keine IP -> Broadcast mit Requester-Id (ist im Dhcp-Paket) 

@Niki: Ich kenne den Bytebereich, aber wenn man ints von 128 bis 255 in ein byte castet, wird es automatisch in ein Byte im Wertebereich -128 bis 0 umgewandelt.

Danke aber für eure Nachrichten!


----------



## Guli (29. Mai 2008)

@Niki
Ist das denn inzwischen auch unter Java so? Ich weiß noch, dass ich mal unter Java mit Byte gekämpft habe, da dieser irgendwie von -128 bis 128 aufnehmen konnte. Der Bereich passt aber nicht in 8bit Informationsspeicher. Aber auch nach einigen Recherchen schien es so zu sein, dass das Verhalten so gewollt war (der Grund fällt mir aber nicht mehr ein).


----------

