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-ზეა დამოკიდებული.

დაკავშირებული სტატიები