Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: indirizzi ip in java

  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    è ovvio che devo fare dei confronti diversi dall'uguaglianza e precisamente devo applicare l'operatore di < e >.
    Posso farlo direttamente con il metodo compareTo dei byte o sono obbligato a convertire i byte in interi? E perchè?
    Per usare compareTo() dovresti passare da byte a Byte. Credo proprio che nel tuo caso non convenga affatto.

    Originariamente inviato da lio.b
    2. qualora l'indirizzo sia ipv6 l'ottetto contiene anche valori letterali, a questo punto la conversione in interi si può fare?
    No, anche qui non hai capito. È la rappresentazione "testuale" degli indirizzi IPv6 che è particolare. Con il IPv4 la rappresentazione testuale è fatta con 4 valori decimali nel range 0-255. In IPv6 la rappresentazione tipica è in esadecimale, del tipo: 2001:0db8:85a3:0000:0000:8a2e:0370:7334

    A te NON cambia nulla. Un byte è un byte con 256 valori. Punto.


    Per concludere: già fare una comparazione < > sugli ottetti di un indirizzo IP ha probabilmente poco senso. Perché dovresti prima stabilire come (e perché) trattare gli ottetti. Con segno? Senza segno?


    IP1: 0x86 0x46 0x23 0x36
    IP2: 0x73 0x34 0x18 0x68

    0x86 è minore o maggiore di 0x73??? Dipende!!!

    Se li intendi con segno allora ti basta comparare direttamente i byte: -122 (0x86) è < di 115 (0x73).

    Se li intendi senza segno allora devi convertire il byte in int "annullando" la estensione del segno, ovvero facendo b&0xFF. 134 (0x86) è > di 115 (0x73)

    Ma per scegliere una o l'altra soluzione devi prima avere ben chiaro perché devi fare questa comparazione degli IP e per quale scopo!!!!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #12
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    sei stato chiarissimo. L'unica cosa che non ho capito è quando scrivi b&0xFF.134. Che significa?

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    sei stato chiarissimo. L'unica cosa che non ho capito è quando scrivi b&0xFF.134. Che significa?
    No scusa ... il punto terminava la frase.

    int iVal = bVal & 0xFF;

    Questo si intende generalmente, per ottenere da un byte un int nel range 0-255. Perché il byte viene convertito ad int estendendo il segno ma poi con la AND si tengono solo gli 8 bit più bassi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ok, grazie veramente di tutto.
    Provo a implementare il metodo (è importante che non ci sia nessun genere d'errore).
    Se non ti dispiace nei giorni seguenti lo inserisco qui nel forum scrivendo inetAddress(andbin) così sai che è il mio e se magari gli vuoi dare un'occhiata te ne sarei grado.

    Ciao e grazie ancora

  5. #15
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da lio.b
    Se non ti dispiace nei giorni seguenti lo inserisco qui nel forum scrivendo inetAddress(andbin)
    Più semplicemente, incolla il codice su questa stessa discussione.
    Non aprire una nuova discussione (con un titolo che andrebbe contro il regolamento) solo per postare il codice funzionante di una discussione già aperta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #16
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Allora ragazzi,
    ho implementato il metodo ma c'è un problema. Il codice è il seguente:

     private static boolean matchAddress (InetAddress a, InetAddress b){
    byte[]firstAddress = a.getAddress();
    byte[]secondAddress = b.getAddress();
    int[] primo = new int[firstAddress.length];
    int[] secondo = new int[secondAddress.length];
    if(primo.length!=secondo.length) // significa che sto paragonando un ipv4 e un ipv6
    return false;
    for(int i=0;i<primo.length;i++)
    primo[i] = (int) firstAddress[i] & 0xff;
    for(int j=0;j<secondo.length;j++)
    secondo[j] = (int) secondAddress[j] & 0xff;
    for(int z =0;z<primo.length;z++){
    if(primo[z]<secondo[z])
    return false;
    }
    return true;

    }

    Il problema è che con gli ipv4 funziona benissimo ma con gli ipv6 no. LeleFt credo che ti sei confuso quando mi hai detto: Se l'InetAddress rappresenta un IPv4 otterrai un array di 4 byte, se rappresenta un IPv6 otterrai un array di 6 byte.
    L'ipv6 ho letto che è formato da otto ottetti ognuno dei quali è formato da 16 bit (2 byte) quindi ovvio che non funziona. Sbaglio? Consigli per risolvere il problema?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.