Javassa byte on etumerkillinen. Siksi oktetti, jonka verkkoarvo on 217, voi näyttää negatiiviselta arvolta, kun se tulostetaan suoraan tavutaulukosta. Se ei tarkoita, että välityspalvelin lähetti virheellisen negatiivisen IP-osoitteen.

Muunna tallennettu arvo etumerkittömäksi kokonaisluvuksi esimerkiksi Byte.toUnsignedInt(value)-komennolla tai käytä DataInputStream.readUnsignedByte()-metodia kenttää lukiessasi. Verkkotilaisessa portissa lue dokumentoitu kaksitavuinen arvo sen sijaan, että käsittelisit kumpaakaan tavua etumerkillisenä desimaalilukuna.

Erota myös esitysmuoto kehystyksestä. Socket-luku voi palauttaa vähemmän tavuja kuin pyydettiin. Lue koko kenttä ja tulkitse se sitten SOCKS-version ja osoitetyypin mukaan. SOCKS5-osoitteet voivat sisältää IPv4-osoitteen, IPv6-osoitteen tai pituusetuliitteellisen verkkotunnuksen; kiinteä neljän tavun oletus kattaa vain yhden näistä muodoista.

Negatiiviselta näyttävän oktetin korjaaminen ratkaisee näyttöongelman. Se ei korjaa jäsentäjää, joka alkoi lukea väärästä siirtymästä tai pysähtyi kesken osoitteen.

Aiheeseen liittyvät artikkelit