http://vietjack.com/python/index.jsp Copyright © vietjack.com Lập trình mạng Python Chương trình bày cho bạn hiểu khái niệm quan trọng lập trình mạng, Lập trình Socket Socket gì? Socket điểm đầu nút (endpoint) kênh giao tiếp song hướng Các Socket giao tiếp bên tiến trình, tiến trình thiết bị tiến trình lục địa khác Các Socket triển khai thơng qua kênh khác nhau: domain, TCP, UDP, … Thư viện socket cung cấp lớp riêng để xử lý trình truyền tải Interface chung để xử lý phần lại Socket có khái niệm riêng sau: Khái niệm Miêu tả domain Là family giao thức protocol sử dụng kỹ thuật truyền tải Các giá trị AF_INET, PF_INET, PF_UNIX, PF_X25, … type Kiểu giao tiếp hai endpoint, đặc trưng SOCK_STREAM cho giao thức hướng kêt nối (connection-oriented) SOCK_DGRAM cho giao thức không hướng kết nối protocol Đặc trưng 0, mà sử dụng để nhận diện biến thể giao thức bên domain type hostname Định danh network interface: Một chuỗi, tên host, địa IPV6, … Một chuỗi "", xác định địa INADDR_BROADCAST Một chuỗi có độ dài 0, xác định INADDR_ANY, http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com Một số nguyên, thông dịch dạng địa nhị phân thứ tự host byte Mỗi Server nghe lời gọi từ Client nhiều cổng (port) Một port chuỗi chứa số hiệu port, tên dịch vụ, … port socket Module Python Để tạo Socket, bạn phải sử dụng hàm socket.socket() có sẵn socket Module, có cú pháp chung sau: s = socket.socket (socket_family, socket_type, protocol=0) Chi tiết tham số: socket_family: Đây AF_UNIX AF_INET socket_type: Đây SOCK_STREAM SOCK_DGRAM protocol: Thường để trống, mặc định Khi bạn có đối tượng socket, bạn sử dụng hàm để tạo chương trình cho Client Server Dưới danh sách hàm: Các phương thức sử dụng cho Server Socket Phương thức Miêu tả s.bind() Phương thức gắn kết địa (hostname, port number) tới Socket s.listen() Phương thức thiết lập bắt đầu TCP Listener s.accept() Phương thức chấp nhận cách thụ động kết nối TCP Client, đợi kết nối tới Các phương thức sử dụng cho Client Socket s.connect(): Phương thức khởi tạo kết nối TCP Server http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com Các phương thức chung cho Socket Phương thức Miêu tả s.recv() Phương thức nhận TCP message s.send() Phương thức truyền TCP message s.recvfrom() Phương thức nhận UDP message s.sendto() Phương thức truyền UDP message s.close() Phương thức đóng Socket socket.gethostname() Trả hostname Ví dụ viết chương Server đơn giản Python Để viết Server, bạn sử dụng hàm socket có socket Module để tạo đối tượng socket Sau đó, đối tượng socket sử dụng để gọi hàm khác để thiết lập Socket Server Bây gọi hàm bind(hostname, port) để xác định port cho dịch vụ bạn host cho Tiếp đó, gọi phương thức accept đối tượng trả Phương thức đợi tới Client kết nối tới port mà bạn xác định, sau trả đố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 http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp s.listen(5) Copyright © vietjack.com # Doi 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 Ví dụ viết chương trình Client đơn giản Python Chúng ta viết chương trình Client đơn giản để mở kết nối tới port có số hiệu cho 12345 với host xác định Hàm socket.connect(hosname, port ) mở kết nối TCP tới hostname port cho Khi bạn có socket mở, bạn đọc từ giống đối tượng IO Code sau Client đơn giản để kết nối tới host port cho, đọc liệu có sẵn từ Socket sau # This is client.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.connect((host, port)) print s.recv(1024) s.close # Dong socket Bây chạy server.py background sau chạy client.py để xem kết # Chay server background $ python server.py & http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/python/index.jsp Copyright © vietjack.com # Mot server da bat dau, ban chay client nhu sau: $ python client.py Kết là: Da ket noi voi ('127.0.0.1', 48437) Cam on ban da ket noi Các Module quan trọng lập trình mạng Protocol Tính chung Port No Python module HTTP Web page 80 httplib, urllib, xmlrpclib NNTP Usenet new 119 nntplib FTP Truyền tải file 20 ftplib, urllib SMTP Gửi email 25 smtplib POP3 Lấy email 110 poplib IMAP4 Lấy email 143 imaplib Telnet Command line 23 telnetlib Gopher Truyền tải Document 70 gopherlib, urllib http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... miễn phí Page http://vietjack.com /python/ index.jsp s.listen(5) Copyright © vietjack.com # Doi s de ket noi voi client while True: c, addr = s.accept() # Thiet lap ket noi voi client print 'Da... client.py để xem kết # Chay server background $ python server.py & http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com /python/ index.jsp Copyright © vietjack.com # Mot... chay client nhu sau: $ python client.py Kết là: Da ket noi voi ('127.0.0.1', 48437) Cam on ban da ket noi Các Module quan trọng lập trình mạng Protocol Tính chung Port No Python module HTTP Web