Avatar billede x-masman Nybegynder
27. april 2005 - 19:03 Der er 10 kommentarer og
1 løsning

Hvorfor vendes IP-addressen i DatagramPacket?

Hej hoveder,

Her kommer et problem, jeg finder meget mystisk. Hvorfor vender DatagramPacket IP adresser om?

Hvis jeg foreksempel sender en datagramPacket fra 192.168.1.101 så giver følgende kode:

    DatagramPacket dp =
        new DatagramPacket(inputBuffer,inputBuffer.length);
    // Server loop
    while(true){
        sock.receive(dp);
        System.out.println("From: " + (dp.getAddress()) + " " + new String(dp.getData()));
     
    }

Dette output:
From: 101.1.168.192 blabla

Er det ikke stenet? Hvorfor og kan man ændre det på "en flot" måde?

Er det ikke mærkligt at det kun er rækkefølgen på bytesne der er vent om og ikke selve bytene?
Avatar billede ullesan Nybegynder
27. april 2005 - 19:41 #1
puf... så er den væk
Avatar billede ullesan Nybegynder
27. april 2005 - 19:43 #2
baah... meget undskyld - kom til at skrive i den forkerte vindue... afvis mit svar
Avatar billede x-masman Nybegynder
27. april 2005 - 19:44 #3
I orden du.
Avatar billede x-masman Nybegynder
27. april 2005 - 19:44 #4
men du har vel ikke et svar til mig vel?
Avatar billede gammelhat Nybegynder
27. april 2005 - 20:46 #5
Du skal nok kigge på 'network byte order' vs 'host byte order'
Avatar billede x-masman Nybegynder
28. april 2005 - 00:03 #6
hmmmm... gammelhat, du ser ud til at have ret. Jeg har nu kigget lidt på det og gogglet lidt, men jeg kan ikke rigtig finde nogen løsning i java. Grunden er at alle spørgsmål jeg kunne finde, var svaret med at man ikke behøver at tænke på det, da dataInputStream selv håndtere det. Men det hjælper ikke rigtig mig, da jeg skal sammenligne ip adressen, men en anden jeg allerede har (I host order).
Er der en metode til det i java ligesom i c? ( ntoh() ) Eller må jeg i gang med at vende arrayet manuelt?
Avatar billede arne_v Ekspert
04. maj 2005 - 20:12 #7
manuelt

  public static int revbyte(int v) {
      return ((v >> 24) & 0x000000FF)
        | ((v >> 8) & 0x0000FF00)
        | ((v << 8) & 0x00FF0000)
        | ((v << 24) & 0xFF000000);
  }
Avatar billede x-masman Nybegynder
19. maj 2005 - 15:23 #8
Ja jeg kom ikke så meget videre, da jeg ikke kunne bruge det til noget alligevel. Men jeg fik da en forklaring. Smid et svar gammelhat for forklaring og arne for en workaround.
Avatar billede arne_v Ekspert
19. maj 2005 - 15:37 #9
ok
Avatar billede x-masman Nybegynder
22. maj 2005 - 14:02 #10
gammelhat vil du ikke have point?
Avatar billede x-masman Nybegynder
23. maj 2005 - 14:53 #11
Nå ikke. Så får arne dem alle.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester