در جاوا byte علامت‌دار است. بنابراین یک اکتت با مقدار 217 روی سیم ممکن است هنگام چاپ مستقیم از آرایه بایت به‌صورت مقدار منفی دیده شود. این به معنای آن نیست که پروکسی یک آدرس IP منفی نامعتبر فرستاده است.

مقدار ذخیره‌شده را به عدد صحیح بدون علامت تبدیل کنید، مثلاً با Byte.toUnsignedInt(value)، یا هنگام خواندن فیلد از DataInputStream.readUnsignedByte() استفاده کنید. برای پورت با ترتیب شبکه، مقدار دو بایتی مستند را بخوانید، نه اینکه هر یک از بایت‌ها را عددی دهدهی و علامت‌دار در نظر بگیرید.

نمایش را نیز از قالب‌بندی جدا کنید. خواندن از سوکت ممکن است کمتر از بایت‌های درخواستی برگرداند. کل فیلد را بخوانید، سپس آن را بر اساس نسخه SOCKS و نوع آدرس تفسیر کنید. آدرس‌های SOCKS5 می‌توانند شامل آدرس IPv4، آدرس IPv6 یا نام دامنه با پیشوند طول باشند؛ فرض ثابت چهار بایت فقط یکی از این شکل‌ها را پوشش می‌دهد.

اصلاح اکتتی که منفی به نظر می‌رسد مشکل نمایش را حل می‌کند. اما تجزیه‌گری را که از جای اشتباه شروع به خواندن کرده یا در میانه آدرس متوقف شده است درست نمی‌کند.

مقالات مرتبط