Hướng dẫn socket trong linux la gi - socket trong linux the gi
1. Giới thiệu về mô hình client/server - Là mô hình phổ biến cho giao tiếp giữa 2 tiến trình/2 máy, trong đó, tiến trình client kết nối đến tiến trình server để yêu cầu trao đổi dữ liệu. - Client cần biết về sự tồn tại và địa chỉ của tiến trình server, nhưng server không cần biết về sự tồn tại và địa chỉ của client cho đến khi kết nối được thiết lập. - Mỗi khi kết nối được thiết lập, cả 2 bên đều có thể trao đổi (gửi và nhận dữ liệu).khi kết nối được thiết lập, cả 2 bên đều có thể trao đổi (gửi và nhận dữ liệu). - Để thiết lập một kết nối cho cả 2 phía, cần xây dựng một socket. Có thể hiểu socket như một điểm đầu cuối của kênh kết nối giữa 2 tiến trình. (Giống như là thực hiện một kết nối giữa 2 người trong một cuộc gọi điện thoại) - Các hệ thống (linux, windows) đều cung cấp các hàm hệ thống để thực hiện thiết lập một socket. 2. Các loại socket Có 2 loại socket được sử dụng rộng rãi là: stream sockets và datagram sockets. - Stream sockets: Dựa trên giao thức TCP (Tranmission Control Protocol), là giao thức hướng luồng (stream oriented). Việc truyền dữ liệu chỉ thực hiện giữa 2 tiến trình đã thiết lập kết nối. Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận một cách đáng tin cậy, đúng thứ tự đã thiết lập kết nối. Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận một cách đáng tin cậy, đúng thứ tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và cơ chế chống tắc nghẽn. - Datagram sockets: Dựa trên giao thức UDP (User Datagram Protocol), là giao thức hướng thông điệp (message oriented). Việc truyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa tiến quá trình. Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức UDP không yêu cầu có sự thiết lập kết nối giữa tiến quá trình. Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức UDP không được tin cậy, có thế không đúng trình tự và lặp lại. Tuy nhiên vì nó không yêu cầu thiết lập kết nối không phải có những cơ chế phức tạp nên tốc độ nhanh…ứng dụng cho các ứng dụng truyền dữ liệu nhanh như chat, game….. 3. Minh họa lập trình socket Bài viết này minh họa lập trình socket trên linux sử dụng trực tiếp các hàm socket api bằng ngôn ngữ C.Mô hình lập trình socket TCP giữa 2 tiến trình client và server như sau: - Các bước thiết lập một socket phía client gồm: + Tạo một socket bằng hàm socket()socket() + Kết nối socket đến địa chỉ của server bằng hàm connect()connect() + Gửi và nhận dữ liệu: Có một số cách khác nhau, đơn giản nhất là sử dụng các hàm read() và write() + Đóng kết nối bằng hàm close()read() và write() + Đóng kết nối bằng hàm close() - Các bước thiết lập một socket phía server gồm: + Tạo một socket bằng hàm socket()socket() + Kết nối socket đến địa chỉ của server bằng hàm connect()bind(). + Gửi và nhận dữ liệu: Có một số cách khác nhau, đơn giản nhất là sử dụng các hàm read() và write() + Đóng kết nối bằng hàm close() - Các bước thiết lập một socket phía server gồm:listen() + Gắn (bind) socket đến địa chỉ của server sử dụng hàm bind(). accept(). Hàm này sẽ dừng (block) cho đến khi nhận được một client kết nối đến. Đối với server trên internet địa chỉ bao gồm địa chỉ ip của máy host + số hiệu cổng dịch vụ (port number) read(), write()) + Lắng nghe (listen) các kết nối đến từ clients sử dụng hàm listen()close()
+ Gửi và nhận dữ liệu với client (hàm read(), write()) + Đóng kết nối bằng hàm close()portnumber Dưới đây là chương trình minh họa lập trình socket TCP sử dụng socket api và pure C. Mã nguồn tham khảo gồm 2 chương trình:server_address portnumber Biên dịch và chạy 2 chương trình này (trên cùng một máy local host, hoặc 2 máy riêng biệt kết nối mạng) - Với server: server portnumber - Với client: client server_addressportnumber
Client kết nối và gửi một thông điệp đến server, server nhận và trả lời.
Phần tiếp theo giải thích chi tiết mã nguồn
3.1. Chương trình server.c
|