Lernen Sie mit mir Python von Grund auf (2) Netzwerkprogrammierung

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 socketkann die Netzwerkprogrammierung mithilfe von Modulen implementiert werden.

socketEs handelt sich um eine Netzwerkprogrammierbibliothek, die TCP/IPdas Protokoll kapselt und eine allgemeine Netzwerkprogrammierschnittstelle bereitstellt, die zum Erstellen von Client- und Serverprogrammen verwendet werden kann. In Python verwenden Sie socketModule, um socketObjekte 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 PyCharmzu 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.MatlabMatlabPyCharmMatlabMatlab

2. Einführung in TCP/IP

TCP/IPEs handelt sich um ein Netzwerkprotokoll, das das Grundprotokoll des Internets darstellt. TCP/IPDie Protokollfamilie umfasst viele Protokolle, von denen TCPdas und IP-Protokoll das wichtigste ist.

TCPDas Protokoll ist ein verbindungsorientiertes Protokoll, das zuverlässige Datenübertragungsdienste bereitstellt. TCPDas Protokoll stellt eine Verbindung über einen Drei-Wege-Handshake her und gewährleistet dann eine zuverlässige Datenübertragung durch Datensegmentierungs- und Bestätigungsmechanismen.

IPDas 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 TCPProtokolle zur Datenübertragung. TCPDas 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 IPeignet sich für Szenarien, die eine schnelle Datenübertragung erfordern, wie z. B. Videostreaming, Echtzeitkommunikation usw.

3. Netzwerkdesign-Modul

1. Einführung in Socket

SocketIst ein Kommunikationsmechanismus, der es verschiedenen Prozessen ermöglicht, über ein Netzwerk zu kommunizieren. In Python Socketwird dies socketdurch Module erreicht. SocketWird 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 socketstellen 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 socketModule 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 SocketObjekt 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 socketkann ein Client mithilfe eines Moduls erstellt werden. Clients müssen normalerweise eine Verbindung zu einer Remote-Verbindung herstellen Socketund 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 socketModulen 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 socketkann die Netzwerkprogrammierung von Protokollen mithilfe von Modulen implementiert werden UDP. Hier ist ein Beispiel für einen einfachen UDPServer und Client:

UDPServer:

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)

UDPKlient:

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 UDPProtokoll 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 UDPdas 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

UDPProtokoll und TCPProtokoll sind zwei häufig verwendete Netzwerkübertragungsprotokolle und weisen die folgenden Unterschiede auf:

  • Verbindungsmodus : TCPDas Protokoll ist ein verbindungsorientiertes Protokoll, während UDPdas Protokoll ein verbindungsloses Protokoll ist. TCPBei Protokollen muss vor der Datenübertragung eine Verbindung hergestellt werden, bei UDPProtokollen ist dies jedoch nicht der Fall.

  • Zuverlässigkeit : TCPDas Protokoll ist ein zuverlässiges Protokoll, das die zuverlässige Übertragung von Daten garantiert, während UDPdas Protokoll ein unzuverlässiges Protokoll ist, das die zuverlässige Übertragung von Daten nicht garantiert.

  • Übertragungseffizienz : UDPDas Protokoll TCPist effizienter als die Protokollübertragung, da UDPdas Protokoll keine Verbindung herstellen und den Verbindungsstatus aufrechterhalten muss, TCPdas Protokoll jedoch.

  • Paketgröße : UDPDie Paketgröße der Protokollübertragung ist auf 64 KB begrenzt, während TCPdas Protokoll keine Begrenzung hat.

  • Anwendungsszenarien : TCPDas 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 das UDPProtokoll 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

UDPDas Protokoll ist ein verbindungsloses Protokoll, das die Zuverlässigkeit und Reihenfolge der Datenübertragung nicht garantiert, aber den Vorteil einer schnellen Übertragungsgeschwindigkeit bietet. UDPDas 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 UDPSocket und bindet IPdie 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 UDPSocket, 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

Ich denke du magst

Origin blog.csdn.net/ch950401/article/details/131595770
Empfohlen
Rangfolge