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

Gắn với các giao diện

Như đã được giải thích trong học phần trước, khi tôi thảo luận UDP, địa chỉ IP cái bạn cặp với một số cổng
khi bạn thực hiện một hoạt động bind() thông báo cho hệ điều hành các giao diện mạng là gì từ đó bạn sẵn
sàng nhận các kết nối. Ví dụ khởi động code trên sử dụng một địa chỉ IP địa phương 127.0.0.1, cái bảo vệ
code của bạn khỏi các kết nối khởi nguồn trên các máy khác.
Bạn có thể thẩm định cái này bằng cách chạy code trên trong server mode, như thể hiện ở trước, và cố gắng
kết nối với một máy khách từ máy khác.

$ python tcp_sixteen.py client 192.168.5.130
Traceback (most recent call last):

ConnectionRefusedError: [Errno 111] Connection refused

Bạn có thể thấy rằng máy chủ, nếu bạn có nó đang chạy, thậm chí không phản ứng. Hệ điều hành thậm chí không thông tin
nó rằng một kết nối đi đến tới cổng của nó đã bị từ chối. (Chú ý rằng nếu bạn có một tường lửa chạy trên máy của bạn,
máy khách có thể treo khi nó cố gắng kết nối, hơn là một ngoại lệ thân thiện “Connection refused” để thông báo nó cái
gì đang diễn ra!)
Nhưng nếu bạn chạy máy chủ với một chuỗi rỗng cho hostname, cái thông báo thông lộ bind() Python rằng bạn đã sẵn sàng
chấp nhận các kết nối qua các giao diện mạng sống của máy của bạn, thì máy khách có thể kết nối thành công từ host khác
(chuỗi rỗng được cung cấp bằng cách cung cấp shell 2 “” này tại cuối command line).

$ python tcp_sixteen.py server “”
Listening at (‘0.0.0.0’, 1060)
Waiting to accept a new connection
We have accepted a connection from (‘127.0.0.1’, 60359)
Socket name: (‘127.0.0.1’, 1060)
Socket peer: (‘127.0.0.1′, 60359)
Incoming sixteen-octet message: b’Hi there, server’
Reply sent, socket closed
Waiting to accept a new connection

Như chú ý trước đây, hệ điều hành của tôi sử dụng địa chỉ IP đặc biệt 0.0.0.0 để có nghĩa “chấp nhận các kết nối trên
bất cứ giao diện nào”, nhưng thông lệ này có thể khác nhau trên hệ điều hành của bạn, và Python che giấu sự khác nhau
này bằng cách để bạn sử dụng chuỗi rỗng thay vào.

Chia sẻ