SOCKS5 პორტების კოდირება Go-ში ორ big-endian ბაიტად
SOCKS5 პორტის ველებისთვის გამოიყენეთ Go-ს binary.BigEndian დამხმარეები ცვლადი სიგრძის ორობითი სტრიქონის ჭრის ნაცვლად.
SOCKS5 პორტის ველები ქსელური ბაიტების რიგით ორი უნიშნო ბაიტია: ყველაზე მნიშვნელოვანი ბაიტი პირველი მოდის. Go-ში უკვე დადასტურებული uint16 პირდაპირ დაკოდეთ:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)შემოიტანეთ encoding/binary. 1080 პორტისთვის მიღებული თექვსმეტობითი ბაიტებია 04 38. 4 პორტისთვის ეს არის 00 04; წინა ნული ფიქსირებული სიგანის ველის ნაწილია.
თუ შეყვანა იწყება როგორც უფრო დიდი მთელი რიცხვი ან სტრიქონი, uint16-ზე გადაყვანამდე შეამოწმეთ მისი რიცხვითი დიაპაზონი. გადაყვანამ შეიძლება მაღალი ბიტები გადააგდოს დიაპაზონს გარეთ მყოფი მნიშვნელობის შეტყობინების ნაცვლად.
SOCKS5 პასუხში სერიალიზაცია გაუკეთეთ BND.PORT-ს, ანუ სერვერის მიბმული პორტის ველს. ნუ დააკოპირებთ მოთხოვნილ დანიშნულების პორტს ამ ველში მხოლოდ იმიტომ, რომ ორივე ორ ბაიტს იკავებს. დაკოდებული ველი პასუხის მისამართის შემდეგ მოათავსეთ, რომლის სიგრძეც ATYP-ზეა დამოკიდებული.