Khái niệm quan trọng nhất trong lập trình mạng, đó là Lập trình Socket.
Socket là các điểm đầu nút (endpoint) của một kênh giao tiếp song hướng. Các Socket có thể giao tiếp bên trong một tiến trình, giữa các tiến trình trên cùng một thiết bị hoặc giữa các tiến trình trên các lục địa khác nhau.
Các Socket có thể được triển khai thông qua các kênh khác nhau: domain, TCP, UDP, … Thư viện socket cung cấp các lớp riêng để xử lý các trình truyền tải cũng như một Interface chung để xử lý phần còn lại.
Socket có các khái niệm riêng như sau:
Khái niệm | Miêu tả |
---|---|
domain | Là family của các giao thức protocol được sử dụng như là kỹ thuật truyền tải. Các giá trị này là các hằng như AF_INET, PF_INET, PF_UNIX, PF_X25, … |
type | Kiểu giao tiếp giữa hai endpoint, đặc trưng là SOCK_STREAM cho các giao thức hướng kêt nối (connection-oriented) và SOCK_DGRAM cho các giao thức không hướng kết nối |
protocol | Đặc trưng là 0, mà có thể được sử dụng để nhận diện một biến thể của một giao thức bên trong một domain hoặc type |
hostname |
Định danh của một network interface:
|
port | Mỗi Server nghe các lời gọi từ Client trên một hoặc nhiều cổng (port). Một port có thể là một chuỗi chứa số hiệu của port, một tên của một dịch vụ, … |
Để tạo một Socket, bạn phải sử dụng hàm socket.socket() có sẵn trong socket Module, có cú pháp chung như sau:
s = socket.socket (socket_family, socket_type, protocol=0)
Chi tiết về tham số:
socket_family: Đây hoặc là AF_UNIX hoặc AF_INET.
socket_type: Đây hoặc là SOCK_STREAM hoặc SOCK_DGRAM.
protocol: Thường được để trống, mặc định là 0.
Khi bạn đã có đối tượng socket, bạn có thể sử dụng các hàm để tạo chương trình cho Client hoặc Server. Dưới đây là danh sách các hàm:
Phương thức | Miêu tả |
---|---|
s.bind() | Phương thức này gắn kết địa chỉ (hostname, port number) tới Socket |
s.listen() | Phương thức này thiết lập và bắt đầu TCP Listener. |
s.accept() | Phương thức này chấp nhận một cách thụ động kết nối TCP Client, đợi cho tới khi kết nối tới. |
s.connect(): Phương thức này khởi tạo kết nối TCP Server.
Phương thức | Miêu tả |
---|---|
s.recv() | Phương thức này nhận TCP message. |
s.send() | Phương thức này truyền TCP message. |
s.recvfrom() | Phương thức này nhận UDP message. |
s.sendto() | Phương thức này truyền UDP message. |
s.close() | Phương thức này đóng Socket. |
socket.gethostname() | Trả về hostname. |
Để viết một Server, bạn sử dụng hàm socket có trong socket Module để tạo một đối tượng socket. Sau đó, đối tượng socket được sử dụng để gọi các hàm khác để thiết lập một Socket Server.
Bây giờ gọi hàm bind(hostname, port) để xác định một port cho dịch vụ của bạn trên host đã cho.
Tiếp đó, gọi phương thức accept của đối tượng được trả về. Phương thức này đợi tới khi một Client kết nối tới port mà bạn đã xác định, và sau đó trả về một đối tượng connectionmà biểu diễn kết nối tới Client đó.
# Day la server.py file import socket # Import socket module s = socket.socket() # Tao mot doi tuong socket host = socket.gethostname() # Lay ten thiet bi local port = 12345 # Danh rieng mot port cho dich vu cua ban. s.bind((host, port)) # Ket noi toi port s.listen(5) # Doi 5 s de ket noi voi client. while True: c, addr = s.accept() # Thiet lap ket noi voi client. print 'Da ket noi voi', addr c.send('Cam on ban da ket noi') c.close() # Ngat ket noi
» Tin mới nhất:
» Các tin khác: