Gắn tới các giao diện (tiếp tục)
Bạn có thấy cái gì đã xảy ra? Các chương trình chạy địa phương được phép gửi các requests cái
khởi nguồn từ bất cứ địa chỉ IP của máy nào cái chúng muốn – thậm chí nếu chúng chỉ đang sử dụng
địa chỉ IP để nói chuyện quay trở lại tới dịch vụ khác trên cùng máy!
Nên gắn tới một giao diện IP có thể hạn chế các hosts bên ngoài nào có thể nói chuyện với bạn. Nhưng
nó sẽ nhất định không hạn chế các trao đổi trò chuyện với các clients khác trên cùng máy, nên miễn là
chúng biết địa chỉ IP tới nó chúng nên kết nối.
Cái gì xảy ra nếu bạn cố chạy 2 server cùng lúc? Dừng tất cả các scripts cái đang chạy và thử chạy 2 servers
trên cùng máy. Bạn sẽ kết nối một cái tới loopback.
$ python udp_remote.py server 127.0.0.1
Listening at (‘127.0.0.1’, 1060)
Bây giờ rằng địa chỉ đó đã bị chiếm, bạn không thể chạy một server thứ hai tại địa chỉ đó, vì sau đó hệ điều
hành sẽ không biết quá trình nào nên nhận gói dữ liệu đã cho đi đến địa chỉ đó.
$ python udp_remote.py server 127.0.0.1
Traceback (most recent call last):
…
OSError: [Errno 98] Address already in use
Nhưng ngạc nhiên hơn là rằng bạn sẽ không thể chạy một server trên cả địa chỉ IP đại diện.
$ python udp_remote.py server
Traceback (most recent call last):
…
OSError: [Errno 98] Address already in use
Cái này thất bại là vì địa chỉ đại diện bao gồm 127.0.0.1, và vì vậy nó xung đột với địa chỉ cái quá trình server
đầu tiên đã nắm lấy. Nhưng cái gì xảy ra nếu thay vì thử chạy server thứ hai so với tất cả giao diện IP, bạn chỉ chạy
nó so với một giao diện IP bên ngoài – một cái cái bản sao đầu tiên của server đang không lắng nghe tới? Hãy thử.
$ python udp_remote.py server 192.168.5.130
Listening at (‘192.168.5.130’, 1060)