Java kalboje byte yra ženklusis. Todėl baitas, kurio tinklo reikšmė 217, gali atrodyti kaip neigiama reikšmė, kai spausdinamas tiesiai iš baitų masyvo. Tai nereiškia, kad tarpinė serveris nusiuntė neteisingą neigiamą IP adresą.

Konvertuokite saugomą reikšmę į beženklį sveikąjį skaičių, pavyzdžiui, naudodami Byte.toUnsignedInt(value), arba skaitydami lauką naudokite DataInputStream.readUnsignedByte(). Tinklo tvarkos prievadui skaitykite dokumentuotą dviejų baitų reikšmę, o ne traktuokite kurį nors baitą kaip ženklų dešimtainį skaičių.

Atskirkite ir pateikimą nuo kadravimo. Skaitant iš lizdo gali grįžti mažiau baitų nei prašyta. Perskaitykite visą lauką, tada interpretuokite pagal SOCKS versiją ir adreso tipą. SOCKS5 adresai gali turėti IPv4 adresą, IPv6 adresą arba domeno vardą su ilgio priešdėliu; fiksuota keturių baitų prielaida apima tik vieną iš šių formų.

Pataisius neigiamai atrodantį baitą, išsprendžiama rodymo problema. Tačiau tai nepataiso analizatoriaus, kuris pradėjo skaityti ne nuo tos vietos arba sustojo adreso viduryje.

Susiję straipsniai