Lập trình mạng Python: giao thức UDP (phần 12)

Kết nối UDP sockets

Trong phần code trên, cái bạn đã thẩm định trong học phần trước, giới thiệu một khái niệm
mới khác cái cần giải thích. Tôi đã thảo luận về binding (gắn) cả lời gọi bind() công khai
cái một server sử dụng để bắt lấy địa chỉ cái nó muốn sử dụng và binding ngầm cái diễn ra khi
client trước tiên thử sử dụng một socket và được gán một số cổng ephermeral tuỳ ý bởi hệ điều
hành.
Nhưng UDP client ở xa trong phần code trên cũng sử dụng một lời gọi mới cái tôi chưa thảo luận
trước đây hoạt động socket connect(). Bạn có thể thấy dễ dàng đủ nó làm cái gì. Thay vì phải sử
dụng sendto() với tuple địa chỉ công khai mọi lần bạn muốn gửi thứ gì đó tới server, lời gọi
connect() để hệ điều hành biết trước địa chỉ ở xa tới nó bạn muốn gửi các gói dữ liệu để rằng bạn
có thể đơn giản cung cấp dữ liệu lời gọi send() và không phải lặp lại địa chỉ server một lần nữa.
Nhưng connect() làm thứ gì khác quan trọng, cái sẽ không rõ ràng chút nào khi đọc phần code trên.
Nó giải quyết vấn đề của client lẫn lộn. Nếu bạn thực hiện test cái bạn thực hiện trong phần “Promiscuity”
trên client này, bạn sẽ thấy rằng client trong phần code trên không chấp nhận nhận các gói dữ liệu từ
server khác. Đây là vì tác dụng thứ hai kém rõ ràng hơn sử dụng connect() để cấu hình đích đến ưa thích
của UDP socket: một khi bạn đã chạy connect(), hệ điều hành sẽ bỏ các gói dữ liệu đi đến tới cổng của bạn
địa chỉ trả về của nó không khớp địa chỉ tới nó bạn đã kết nối.

Chia sẻ