Professional Documents
Culture Documents
Báo Cáo Thực Tập Option1
Báo Cáo Thực Tập Option1
Bước 1: Client (bên chủ động) gửi đến Server một TCP Segment yêu cầu nối kết, trong đó chứa
số thứ tự khởi đầu mà nó sẽ dùng (Flags = SYN, SequenceNum = x).
Bước 2: Server trả lời cho Client bằng một TCP Segment khác, trong đó báo nhận rằng nó sẵn
sàng nhận các Byte dữ liệu bắt đầu từ số thứ tự x+1 (Flags = ACK, Ack = x + 1) và cũng báo
rằng số thứ tự khởi đầu của Server là y (Flags = SYN, SequenceNum = y).
Bước 3: Cuối cùng Client báo cho Server biết, nó đã biết số thứ tự khởi đầu của server là y
(Flags = ACK, Ack = y+1).
I.3. TCP Socket:
Phía Client:
Hàm connect():
Cú pháp:
int connect(int sockfd, struct sockaddr *addr, socklen_t addrlen);
Chức năng: Kết nối Socket sockfd đến địa chỉ trong addr.
Giá trị trả về: 0 nếu thành công, -1 nếu có lỗi xảy ra.
Phía Server:
Hàm listen():
Cú pháp:
int listen(int sockfd, int backlog);
Tham số backlog là số kết nối đến tối đa đang đợi để được chấp nhận. Từ Linux 5.4, giá trị
backlog tối đa là 4096.
Hàm accept():
Cú pháp:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
Chức năng: Hàm này lấy kết nối đầu tiên trong hàng đợi từ sockfd (đang listen), tạo 1
Socket mới và dùng nó để giao tiếp với kết nối mới chấp nhận.
Giá trị trả về: FD của Socket mới nếu thành công, -1 nếu xảy ra lỗi.
Trong hàm này, địa chỉ trong addr là địa chỉ của Client đang kết nối tới. Socket cũ vẫn ở chế
độ listen.
Sau khi Server đã chấp nhận kết nối, hai bên có thể gửi và nhận dữ liệu qua các hàm read,
write, send, recv.
Do bản chất của UDP là không nối kết nên sẽ không có các hàm để thiết lập kết nối. Thay
vào đó, ta phải chỉ rõ địa chỉ IP và cổng của máy đích trong hàm sendto().
Ưu điểm:
Chương trình đã chạy đúng chức năng: truyền 1 File từ Client đến Server.
Hiển thị thông tin của Client (địa chỉ IP và cổng), hiển thị số Byte được truyền
thành công.
Tận dụng hiệu quả bộ nhớ và đường truyền: Nạp dữ liệu đầy bộ nhớ tạm rồi mới
truyền gói tin.
Server có kiểm tra xem có File bị trùng tên mặc định không. Nếu có, Server tạo
File mới, tránh làm thay đổi dữ liệu trên File đã tồn tại.
Nhược điểm:
Cả Server và Client đều sử dụng tên File mặc định, chưa cho phép người dùng tự
nhập tên File.
Trong quá trình đọc/ghi File từ bộ nhớ đệm, chương trình không kiểm tra xem dữ
liệu có bị lỗi hay không.