ฟิลด์พอร์ต 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

บทความที่เกี่ยวข้อง