Vorwort
Gestern habe ich zum ersten Mal erklärt, wie man mit Python von Grund auf anfängt und welche obligatorischen Inhalte die Programmiergrammatik enthält, wie z. B. die ersten Schritte mit Python3, Listen und Tupel, Zeichenfolgen, Wörterbücher, Bedingungen, Schleifen und andere Anweisungen, Funktionen, objektorientiert, Ausnahmen und Dateiverarbeitung
1. Lernen Sie mit mir Python von Grund auf (1) Obligatorische Programmiergrammatik
Heute werde ich über den zweiten Teil sprechen: Python-Parallelprogrammierung: Netzwerkprogrammierung
Diese Artikelserie basiert auf der folgenden Lernroute. Aufgrund des großen Inhalts: Erlernen von Python von Grund auf bis hin zur fortgeschrittenen Roadmap
Achten Sie auf den offiziellen Account: Python-Technologie-Trainingslager , lernen Sie Schritt für Schritt Fortgeschrittene
Python-Ressourcen, die für nullbasiertes Lernen und fortgeschrittene Personen geeignet sind:
① Tencent-zertifiziertes Python-Komplettprojekt mit praktischen Tutorialnotizen (PDF)
② Mehr als ein Dutzend Python-Interviewthemen großer Hersteller (PDF)
③ Python-vollständiger Satz Video-Tutorials (Zero Foundation-Advanced Advanced JS Reverse)
④ Hunderte von Projekten mit tatsächlichen Kämpfen + Quellcode + Notizen
⑤ Programmierung Grammatik – maschinelles Lernen – Full-Stack-Entwicklung – Datenanalyse – Crawler – APP-Reverse-Engineering und andere vollständige Projekte + Dokumente
⑥ Austausch und Studium
⑦ Möchten Sie Teilzeitaufträge annehmen
Kapitel 1: Netzwerkprogrammierung
1. Netzwerkprogrammierung
Unter Netzwerkprogrammierung versteht man Programmiertechniken, die Computernetzwerke zur Kommunikation nutzen. In Python socket
kann die Netzwerkprogrammierung mithilfe von Modulen implementiert werden.
socket
Es handelt sich um eine Netzwerkprogrammierbibliothek, die TCP/IP
das Protokoll kapselt und eine allgemeine Netzwerkprogrammierschnittstelle bereitstellt, die zum Erstellen von Client- und Serverprogrammen verwendet werden kann. In Python verwenden Sie socket
Module, um socket
Objekte zu erstellen und diese Objekte dann für die Netzwerkkommunikation zu verwenden.
Das Folgende ist ein einfaches Beispiel für eine Netzwerkprogrammierung, bei dem ein Server und ein Client erstellt werden, der Client eine Nachricht an den Server sendet und der Server die Nachricht ausdruckt, nachdem er sie empfangen hat:
Serverseitiger Code:
import socket
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 8888))
# 监听端口
server_socket.listen(5)
print('服务器已启动,等待客户端连接...')
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print('客户端已连接,地址为:', client_address)
# 接收客户端消息
data = client_socket.recv(1024)
print('接收到客户端消息:', data.decode())
# 关闭socket连接
client_socket.close()
server_socket.close()
Kundencode:
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(('127.0.0.1', 8888))
# 发送消息
client_socket.send('Hello, server!'.encode())
# 关闭socket连接
client_socket.close()
Um Dateien in PyCharm
zu kompilieren und auszuführen , müssen Sie zunächst Umgebungsvariablen installieren und konfigurieren. Öffnen Sie dann die Datei in , klicken Sie auf die Schaltfläche „Ausführen“, um die Datei zu kompilieren und auszuführen. Wenn Parameter übergeben werden müssen, können diese in der Laufkonfiguration festgelegt werden.Matlab
Matlab
PyCharm
Matlab
Matlab
2. Einführung in TCP/IP
TCP/IP
Es handelt sich um ein Netzwerkprotokoll, das das Grundprotokoll des Internets darstellt. TCP/IP
Die Protokollfamilie umfasst viele Protokolle, von denen TCP
das und IP
-Protokoll das wichtigste ist.
TCP
Das Protokoll ist ein verbindungsorientiertes Protokoll, das zuverlässige Datenübertragungsdienste bereitstellt. TCP
Das Protokoll stellt eine Verbindung über einen Drei-Wege-Handshake her und gewährleistet dann eine zuverlässige Datenübertragung durch Datensegmentierungs- und Bestätigungsmechanismen.
IP
Das Protokoll ist ein verbindungsloses Protokoll, das Datenpaketübertragungsdienste bereitstellt. Das IP-Protokoll bestimmt den Übertragungspfad des Datenpakets durch den Routing-Algorithmus und überträgt das Datenpaket dann an das Ziel.
Bei der Netzwerkprogrammierung verwenden wir normalerweise TCP
Protokolle zur Datenübertragung. TCP
Das Protokoll bietet zuverlässige Datenübertragungsdienste und eignet sich für Szenarien, in denen die Zuverlässigkeit der Datenübertragung sichergestellt werden muss, z. B. Dateiübertragung und E-Mail-Übertragung. Das Protokoll IP
eignet sich für Szenarien, die eine schnelle Datenübertragung erfordern, wie z. B. Videostreaming, Echtzeitkommunikation usw.
3. Netzwerkdesign-Modul
1. Einführung in Socket
Socket
Ist ein Kommunikationsmechanismus, der es verschiedenen Prozessen ermöglicht, über ein Netzwerk zu kommunizieren. In Python Socket
wird dies socket
durch Module erreicht. Socket
Wird normalerweise für die Kommunikation zwischen Clients und Servern verwendet, kann aber auch für die Kommunikation zwischen Prozessen verwendet werden.
2. Verwendung des Sockelmoduls
Module in Python socket
stellen eine Reihe von Funktionen und Klassen zur Erstellung und Bearbeitung bereit Socket
. Zu den häufig verwendeten Funktionen und Klassen gehören:
socket()
: Erstellen Sie ein Socket-Objekt.bind()
: Binden Sie den Socket an eine bestimmte Adresse und einen bestimmten Port.listen()
: Beginnen Sie mit der Überwachung auf Verbindungsanfragen.accept()
: Akzeptieren Sie eine Verbindungsanfrage und geben Sie ein neues Socket-Objekt zurück.connect()
: Mit einem Remote-Socket verbinden.send()
:Daten senden.recv()
:Empfange Daten.
3. Server
In Python können Sie socket
Module verwenden, um einen Server zu erstellen. Ein Server muss sich normalerweise an eine bestimmte Adresse und einen bestimmten Port binden und auf Verbindungsanfragen warten. Wenn ein Client eine Verbindung zum Server herstellt, akzeptiert der Server die Verbindungsanforderung und erstellt ein neues Socket
Objekt zur Verarbeitung der Clientanforderung.
Hier ist ein einfaches Beispiel für einen Python-Server:
import socket
HOST = '127.0.0.1' # 服务器地址
PORT = 8888 # 服务器端口号
# 创建一个Socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定到地址和端口
server_socket.bind((HOST, PORT))
# 开始监听连接请求
server_socket.listen(1)
print('Server is running on {}:{}'.format(HOST, PORT))
while True:
# 接受一个连接请求,并返回一个新的Socket对象
client_socket, client_address = server_socket.accept()
print('Client connected from {}:{}'.format(client_address[0], client_address[1]))
# 处理客户端请求
data = client_socket.recv(1024)
print('Received data: {}'.format(data.decode()))
# 发送响应数据
response = 'Hello, client!'
client_socket.send(response.encode())
# 关闭连接
client_socket.close()
4. Kunde
In Python socket
kann ein Client mithilfe eines Moduls erstellt werden. Clients müssen normalerweise eine Verbindung zu einer Remote-Verbindung herstellen Socket
und Anforderungsdaten senden. Wenn der Server auf die Anfrage antwortet, erhält der Client die Antwortdaten.
Hier ist ein einfaches Beispiel für einen Python-Client:
import socket
HOST = '127.0.0.1' # 服务器地址
PORT = 8888 # 服务器端口号
# 创建一个Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到远程Socket
client_socket.connect((HOST, PORT))
# 发送请求数据
request = 'Hello, server!'
client_socket.send(request.encode())
# 接收响应数据
response = client_socket.recv(1024)
print('Received data: {}'.format(response.decode()))
# 关闭连接
client_socket.close()
5. Datei-Downloader
Ein Datei-Downloader ist eine gängige Webanwendung, die Dateien von einem Remote-Server herunterlädt und lokal speichert. In Python können Datei-Downloader mithilfe von socket
Modulen und Modulen implementiert werden.urllib
Hier ist ein einfaches Beispiel für einen Python-Datei-Downloader:
import socket
import urllib.request
HOST = '127.0.0.1' # 服务器地址
PORT = 8888 # 服务器端口号
FILE_URL = 'http://example.com/file.txt' # 文件下载地址
FILE_NAME = 'file.txt' # 文件保存路径
# 创建一个Socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到远程Socket
client_socket.connect((HOST, PORT))
# 发送请求数据
request = 'GET {}\r\n'.format(FILE_URL)
client_socket.send(request.encode())
# 接收响应数据
response = client_socket.recv(1024)
print('Received data: {}'.format(response.decode()))
# 下载文件并保存到本地
with open(FILE_NAME, 'wb') as f:
while True:
data = client_socket.recv(1024)
if not data:
break
f.write(data)
# 关闭连接
client_socket.close()
4. Ergänzende Inhalte
1. UDP-Protokoll in der Netzwerkprogrammierung
UDP (User Datagram Protocol) ist ein verbindungsloses und unzuverlässiges Übertragungsprotokoll. Es garantiert nicht die Zuverlässigkeit und Reihenfolge von Datenpaketen, aber die Übertragungsgeschwindigkeit ist hoch und eignet sich für einige Anwendungsszenarien, die keine hohe Datenzuverlässigkeit erfordern B. Video, Audio und andere Echtzeitübertragungen.
In Python socket
kann die Netzwerkprogrammierung von Protokollen mithilfe von Modulen implementiert werden UDP
. Hier ist ein Beispiel für einen einfachen UDP
Server und Client:
UDP
Server:
import socket
# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 8888))
while True:
# 接收数据
data, addr = server_socket.recvfrom(1024)
print('Received from %s:%s.' % addr)
print('Data: %s' % data.decode())
# 发送数据
server_socket.sendto('Hello, client!'.encode(), addr)
UDP
Klient:
import socket
# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
client_socket.sendto('Hello, server!'.encode(), ('127.0.0.1', 8888))
# 接收数据
data, addr = client_socket.recvfrom(1024)
print('Received from %s:%s.' % addr)
print('Data: %s' % data.decode())
# 关闭套接字
client_socket.close()
Im UDP
Protokoll müssen beim Senden von Daten die Zieladresse und die Portnummer angegeben werden, und beim Empfangen der Daten werden die Adresse und die Portnummer des Absenders zurückgegeben. Da UDP
das Protokoll die Zuverlässigkeit und Reihenfolge der Daten nicht garantiert, müssen in praktischen Anwendungen Probleme wie Datenverlust, Duplizierung und Störung berücksichtigt werden.
2. Der Unterschied zwischen UDP-Protokoll und TCP-Protokoll
UDP
Protokoll und TCP
Protokoll sind zwei häufig verwendete Netzwerkübertragungsprotokolle und weisen die folgenden Unterschiede auf:
-
Verbindungsmodus :
TCP
Das Protokoll ist ein verbindungsorientiertes Protokoll, währendUDP
das Protokoll ein verbindungsloses Protokoll ist.TCP
Bei Protokollen muss vor der Datenübertragung eine Verbindung hergestellt werden, beiUDP
Protokollen ist dies jedoch nicht der Fall. -
Zuverlässigkeit :
TCP
Das Protokoll ist ein zuverlässiges Protokoll, das die zuverlässige Übertragung von Daten garantiert, währendUDP
das Protokoll ein unzuverlässiges Protokoll ist, das die zuverlässige Übertragung von Daten nicht garantiert. -
Übertragungseffizienz :
UDP
Das ProtokollTCP
ist effizienter als die Protokollübertragung, daUDP
das Protokoll keine Verbindung herstellen und den Verbindungsstatus aufrechterhalten muss,TCP
das Protokoll jedoch. -
Paketgröße :
UDP
Die Paketgröße der Protokollübertragung ist auf 64 KB begrenzt, währendTCP
das Protokoll keine Begrenzung hat. -
Anwendungsszenarien :
TCP
Das Protokoll eignet sich für Szenarien, die eine hohe Zuverlässigkeit der Datenübertragung erfordern, wie z. B. Dateiübertragung, E-Mail-Übertragung usw.; und dasUDP
Protokoll eignet sich für Szenarien, die eine hohe Echtzeit-Datenübertragung erfordern, wie z. B. Live-Videoübertragungen, Sprachanrufe usw.
3. Implementierung des UDP-Protokollcodes
UDP
Das Protokoll ist ein verbindungsloses Protokoll, das die Zuverlässigkeit und Reihenfolge der Datenübertragung nicht garantiert, aber den Vorteil einer schnellen Übertragungsgeschwindigkeit bietet. UDP
Das Folgende ist die Code-Implementierung der Netzwerkprogrammierung mithilfe von Protokollen in Python :
Serverseitiger Code:
import socket
# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 8888))
# 接收数据
while True:
data, addr = server_socket.recvfrom(1024)
print('Received from %s:%s.' % addr)
print('Data: %s' % data.decode())
# 发送数据
server_socket.sendto('Hello, client!'.encode(), addr)
Kundencode:
import socket
# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
client_socket.sendto('Hello, server!'.encode(), ('127.0.0.1', 8888))
# 接收数据
data, addr = client_socket.recvfrom(1024)
print('Received from %s:%s.' % addr)
print('Data: %s' % data.decode())
# 关闭套接字
client_socket.close()
Im obigen Code erstellt der Server zunächst einen UDP
Socket und bindet IP
die Adresse und die Portnummer. Empfangen Sie dann recvfrom()
die vom Client über die Methode gesendeten Daten und sendto()
senden Sie die Daten über die Methode an den Client. Der Client erstellt außerdem einen UDP
Socket, sendto()
sendet Daten über die Methode an den Server und recvfrom()
empfängt dann die vom Server über die Methode gesendeten Daten. Schließlich schließt der Client den Socket.
Diese Artikelserie basiert auf der folgenden Lernroute. Aufgrund des großen Inhalts: Erlernen von Python von Grund auf bis hin zur fortgeschrittenen Roadmap
Achten Sie auf den offiziellen Account: Python-Technologie-Trainingslager , lernen Sie Schritt für Schritt Fortgeschrittene
Python-Ressourcen, die für nullbasiertes Lernen und fortgeschrittene Personen geeignet sind:
① Tencent-zertifiziertes Python-Komplettprojekt mit praktischen Tutorialnotizen (PDF)
② Mehr als ein Dutzend Python-Interviewthemen großer Hersteller (PDF)
③ Python-vollständiger Satz Video-Tutorials (Zero Foundation-Advanced Advanced JS Reverse)
④ Hunderte von Projekten mit tatsächlichen Kämpfen + Quellcode + Notizen
⑤ Programmierung Grammatik – maschinelles Lernen – Full-Stack-Entwicklung – Datenanalyse – Crawler – APP-Reverse-Engineering und andere vollständige Projekte + Dokumente
⑥ Austausch und Studium
⑦ Möchten Sie Teilzeitaufträge annehmen
Im nächsten Kapitel geht es um: Python-Parallelprogrammierung: Multithreading