Python - Lập trình mạng

Python cung cấp hai cấp độ truy cập vào các dịch vụ mạng. Ở cấp độ thấp, bạn có thể truy cập hỗ trợ socket cơ bản trong hệ điều hành cơ bản, cho phép bạn triển khai các máy khách và máy chủ cho cả giao thức hướng kết nối và không kết nối.

Python cũng có các thư viện cung cấp quyền truy cập cấp cao hơn vào các giao thức mạng cấp ứng dụng cụ thể, chẳng hạn như FTP, HTTP, v.v.

Chương này cung cấp cho bạn sự hiểu biết về khái niệm nổi tiếng nhất trong Mạng - Lập trình Socket.

Sockets là gì?

Các ổ cắm là các điểm cuối của một kênh truyền thông hai chiều. Sockets có thể giao tiếp trong một quy trình, giữa các quy trình trên cùng một máy hoặc giữa các quy trình trên các lục địa khác nhau.

Sockets có thể được triển khai trên một số kiểu kênh khác nhau: socket miền Unix, TCP, UDP, v.v. Các ổ cắm thư viện cung cấp các lớp cụ thể để xử lý các tàu vận tải thông thường cũng như một giao diện chung để xử lý phần còn lại.

Sockets có từ vựng riêng -

Sr.No. Thuật ngữ & Mô tả
1

Domain

Họ các giao thức được sử dụng làm cơ chế vận chuyển. Các giá trị này là các hằng số như AF_INET, PF_INET, PF_UNIX, PF_X25, v.v.

2

type

Loại giao tiếp giữa hai điểm cuối, thường là SOCK_STREAM cho các giao thức hướng kết nối và SOCK_DGRAM cho các giao thức không kết nối.

3

protocol

Thông thường, giá trị này có thể được sử dụng để xác định một biến thể của giao thức trong một miền và loại.

4

hostname

Định danh của giao diện mạng -

  • Một chuỗi, có thể là tên máy chủ, địa chỉ có dấu chấm tứ hoặc địa chỉ IPV6 trong ký hiệu dấu hai chấm (và có thể là dấu chấm)

  • Chuỗi "<broadcast>", chỉ định địa chỉ INADDR_BROADCAST.

  • Một chuỗi có độ dài bằng 0, chỉ định INADDR_ANY hoặc

  • Số nguyên, được hiểu là địa chỉ nhị phân theo thứ tự byte máy chủ.

5

port

Mỗi máy chủ lắng nghe các máy khách gọi trên một hoặc nhiều cổng. Một cổng có thể là số cổng Fixnum, một chuỗi chứa số cổng hoặc tên của một dịch vụ.

Các ổ cắm module

Để tạo một ổ cắm, bạn phải sử dụng hàm socket.socket () có sẵn trong mô-đun socket , có cú pháp chung:

s = socket.socket (socket_family, socket_type, protocol=0)

Đây là mô tả của các tham số -

  • socket_family - Đây là AF_UNIX hoặc AF_INET, như đã giải thích trước đó.

  • socket_type - Đây là SOCK_STREAM hoặc SOCK_DGRAM.

  • protocol - Điều này thường được bỏ qua, mặc định là 0.

Khi bạn có đối tượng socket , bạn có thể sử dụng các chức năng cần thiết để tạo chương trình máy khách hoặc máy chủ của mình. Sau đây là danh sách các chức năng cần thiết:

Phương thức ổ cắm máy chủ

Sr.No. Phương pháp & Mô tả
1

s.bind()

Phương thức này liên kết địa chỉ (tên máy chủ, cặp số cổng) với socket.

2

s.listen()

Phương pháp này thiết lập và khởi động trình nghe TCP.

3

s.accept()

Điều này chấp nhận thụ động kết nối máy khách TCP, đợi cho đến khi kết nối đến (chặn).

Phương thức Socket Máy khách

Sr.No. Phương pháp & Mô tả
1

s.connect()

Phương pháp này chủ động khởi tạo kết nối máy chủ TCP.

Các phương pháp ổ cắm chung

Sr.No. Phương pháp & Mô tả
1

s.recv()

Phương thức này nhận thông báo TCP

2

s.send()

Phương thức này truyền thông điệp TCP

3

s.recvfrom()

Phương thức này nhận được tin nhắn UDP

4

s.sendto()

Phương thức này truyền thông điệp UDP

5

s.close()

Phương thức này đóng ổ cắm

6

socket.gethostname()

Trả về tên máy chủ.

Một máy chủ đơn giản

Để viết máy chủ Internet, chúng tôi sử dụng socketchức năng có sẵn trong mô-đun socket để tạo một đối tượng socket. Sau đó, một đối tượng socket được sử dụng để gọi các chức năng khác nhằm thiết lập một máy chủ socket.

Gọi ngay bind(hostname, port)chức năng chỉ định một cổng cho dịch vụ của bạn trên máy chủ nhất định.

Tiếp theo, gọi phương thức chấp nhận của đối tượng trả về. Phương thức này đợi cho đến khi một máy khách kết nối với cổng bạn đã chỉ định, rồi trả về một đối tượng kết nối đại diện cho kết nối với máy khách đó.

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection

Một khách hàng đơn giản

Hãy để chúng tôi viết một chương trình khách rất đơn giản, mở một kết nối đến một cổng 12345 nhất định và một máy chủ nhất định. Điều này rất đơn giản để tạo một máy khách ổ cắm bằng cách sử dụng chức năng mô-đun ổ cắm của Python .

Các socket.connect(hosname, port )mở kết nối TCP tới tên máy chủ trên cổng . Khi bạn đã mở một ổ cắm, bạn có thể đọc từ đó giống như bất kỳ đối tượng IO nào. Khi hoàn tất, hãy nhớ đóng nó, vì bạn sẽ đóng một tệp.

Đoạn mã sau là một ứng dụng khách rất đơn giản kết nối với một máy chủ và cổng nhất định, đọc bất kỳ dữ liệu nào có sẵn từ ổ cắm, sau đó thoát ra -

#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close()                     # Close the socket when done

Bây giờ chạy server.py này trong nền và sau đó chạy trên client.py để xem kết quả.

# Following would start a server in background.
$ python server.py & 

# Once server is started run client as follows:
$ python client.py

Điều này sẽ tạo ra kết quả sau:

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Mô-đun Internet Python

Danh sách một số mô-đun quan trọng trong lập trình Mạng / Internet Python.

Giao thức Chức năng chung Cổng số Mô-đun Python
HTTP trang web 80 httplib, urllib, xmlrpclib
NNTP Tin tức Usenet 119 nntplib
FTP Truyền tệp 20 ftplib, urllib
SMTP Gửi email 25 smtplib
POP3 Tìm nạp email 110 poplib
IMAP4 Tìm nạp email 143 imaplib
Telnet Dòng lệnh 23 telnetlib
Gopher Chuyển tài liệu 70 gopherlib, urllib

Vui lòng kiểm tra tất cả các thư viện được đề cập ở trên để hoạt động với các giao thức FTP, SMTP, POP và IMAP.

Đọc thêm

Đây là một khởi đầu nhanh chóng với Lập trình Socket. Nó là một chủ đề rộng lớn. Bạn nên đi qua liên kết sau để tìm thêm chi tiết -

  • Lập trình Unix Socket .

  • Thư viện Socket Python và Mô-đun .