ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับซ็อกเก็ตและวิธีการทำงานจากมุมมองของโปรแกรมเมอร์

ฉันเริ่มต้นด้วย UDP

ฉันอาจจะโพสต์บน TCP ต่อไป

ระบบปฏิบัติการ (OS) มีบัฟเฟอร์สำหรับซ็อกเก็ต UDP แต่ละตัว

เมื่อเครื่องของคุณได้รับแพ็กเก็ต UDP (หรือเซ็กเมนต์) ระบบปฏิบัติการจะจัดเก็บไว้ในบัฟเฟอร์นี้ โดยที่ข้อความ (หรือดาตาแกรม) ในแพ็กเก็ตจะต้องมีขนาดไม่เกินขนาดของบัฟเฟอร์นี้

ในโค้ดของคุณ คุณอาจมีวิธีบางอย่างเช่น 'รับจาก' ที่คุณจะเรียกใช้บนซ็อกเก็ตของคุณ

socket.recv_from()

วิธีนี้จะถามระบบปฏิบัติการถึงข้อความถัดไปที่มีอยู่ในบัฟเฟอร์ (ถ้ามี)

หากมีข้อความในบัฟเฟอร์ ระบบปฏิบัติการจะส่งคืนข้อความดังกล่าวให้กับคุณและเพิ่มพื้นที่ว่างในบัฟเฟอร์

หากไม่มีข้อความในบัฟเฟอร์ ระบบปฏิบัติการอาจตอบกลับว่ายังไม่มีข้อความ

หากวิธีการที่คุณใช้บนซ็อกเก็ต UDP ของคุณบล็อกจนกว่าจะได้รับข้อความ สิ่งที่น่าจะเกิดขึ้นก็คือโปรแกรมของคุณขอข้อความจากระบบปฏิบัติการทุกครั้งที่มีโอกาส และมันจะถามต่อไปจนกว่าจะได้รับข้อความกลับ .

เนื่องจากระบบปฏิบัติการมีบัฟเฟอร์นี้สำหรับคุณ หมายความว่าคุณไม่ต้องกังวลมากเกินไปเกี่ยวกับการไม่สามารถอ่านจากซ็อกเก็ตของคุณได้ 100% ตลอดเวลา คุณสามารถพักผ่อนได้อย่างสบายใจโดยรู้ว่าหากระบบปฏิบัติการได้รับข้อความในขณะที่โปรแกรมของคุณกำลังทำอย่างอื่นอยู่ ข้อความนั้นจะยังคงพร้อมใช้งานในครั้งถัดไปที่คุณเรียกใช้เมธอด 'รับจาก' บนซ็อกเก็ตของคุณ

บัฟเฟอร์นี้ยังสามารถบัฟเฟอร์หลายข้อความได้ ตราบใดที่ขนาดรวมของข้อความทั้งหมดไม่เกินขนาดของบัฟเฟอร์ข้อความ OS ซึ่งหมายความว่าข้อความหลายรายการสามารถเข้าสู่ระบบปฏิบัติการของคุณและอยู่ในบัฟเฟอร์ จากนั้นเมื่อคุณพร้อมที่จะเริ่มรับบนซ็อกเก็ตของคุณ คุณสามารถวนรอบการเรียก 'รับจาก' จนกว่าคุณจะอ่านข้อความทั้งหมดที่รอคุณอยู่ในบัฟเฟอร์ .