Một client và server TCP đơn giản (tiếp tục)
Lựa chọn của bạn về số cổng cũng mang cùng trọng lượng như nó đã làm khi bạn chọn các số cổng cho UDP trong học
phần trước, và lại một lần nữa, sự đối xứng giữa TCP và UDP trên chủ đề về các số cổng là tương tự đủ để rằng bạn có thể
đơn giản áp dụng lí do bạn sử dụng ở đó để hiểu tại sao cùng lựa chọn đã được sử dụng ở đây trong học phần này.
Nên, những sự khác nhau là gì giữa các nỗ lực trước kia với UDP và máy chủ và máy khách mới này cái thay vào xây dựng
trên TCP?
Máy khách trông thực sự rất tương tự. Nó tạo một socket, nó chạy connect() với địa chỉ của máy chủ với nó nó muốn trao
đổi thông tin, và sau đó nó là tự do để gửi và nhận dữ liệu. Nhưng vượt quá cái đó, có một vài sự khác nhau.
Trước tiên, lời gọi TCP connect() – như tôi thảo luận trước một chút – không phải là đoạn cấu hình socket địa phương
vô hại cái nó là trường hợp của UDP, nơi nó hoàn toàn thiết lập một địa chỉ ở xa mặc định sẽ được sử dụng với các lời
gọi send() hay recv() tiếp theo. Ở đây, connect() là một hoạt động mạng sống thực cái khởi động three-way handshake
giữa máy chủ và máy khách để rằng chúng đã sẵn sàng trao đổi thông tin. Cái này có nghĩa rằng connect() có thể thất
bại, như bạn có thể thẩm định hoàn toàn dễ dàng bằng cách thực thi máy khách khi máy chủ không chạy.
$ python tcp_deadlock.py client localhost
Sending 16 bytes of data, in chunks of 16 bytes
Traceback (most recent call last):
…
ConnectionRefusedError: [Errno 111] Connection refused