Một client và server TCP đơn giản (tiếp tục)
Thứ hai, bạn sẽ thấy rằng máy khách TCP là một cách thức đơn giản hơn nhiều so với máy khách UDP, vì nó không cần
thực hiện dự phòng cho các gói dữ liệu bị bỏ. Vì sự chắc chắn cái TCP cung cấp, nó có thể send() dữ liệu mà thậm
chí không cần dừng để kiểm tra xem máy ở xa đã nhận nó và chạy recv() mà không phải xem xét khả năng truyền lại
yêu cầu của nó. Máy khách có thể chắc chắn rằng stack mạng sẽ thực hiện truyền lại cần thiết để đưa dữ của nó qua.
Thứ ba, có một hướng đi trong đó chương trình này thực sự là phức tạp hơn code UDP tương ứng – và cái này có thể
làm ngạc nhiên bạn vì, với tất cả các đảm bảo của nó, nó có vẻ như các dòng TCP sẽ nhất loạt đơn giản cho lập
trình viên hơn là các UDP datagrams. Nhưng chính xác vì TCP xem xét dữ liệu đi ra và đi vào của bạn sẽ đơn giản
là các dòng không đầu hay cuối, nó cảm thấy tự do để chia tách chúng thành các gói dữ liệu như thế nào nó muốn.
Và vì vậy send() và recv() có nghĩa thứ gì đó khác với chúng có nghĩa trước kia. Trong trường hợp UDP, chúng đơn
giản có nghĩa “gửi datagram này” hay “nhận một datagram” và mỗi datagram là cơ bản: nó hoặc là đi đến hay không như
đơn vị dữ liệu tự chứa. Một ứng dụng sẽ không bao giờ thấy UDP datagrams cái chỉ là gửi một nửa hay nhận một nửa.
Chỉ các datagrams toàn vẹn được phân phát tới một ứng dụng UDP.
Nhưng TCP có thể chia tách dòng dữ liệu của nó thành các gói dữ liệu thuộc một vài kích thước khác nhau suốt quá trình
truyền và sau đó dần lắp lại chúng trên cuối nhận. Mặc dù cái này không giống với thông điệp 16 octet nhỏ trong code
học phần trước, code của bạn vẫn cần chuẩn bị cho khả năng. Các kết quả là gì của tạo dòng TCP cho cả các lời gọi
send() và recv()?