Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert Python die UDP- und TCP-Kommunikation?

Wie implementiert Python die UDP- und TCP-Kommunikation?

王林
王林nach vorne
2023-05-08 11:46:071885Durchsuche

1. UDP ist ein verbindungsloses und unzuverlässiges Übertragungsprotokoll. UDP bietet jedoch die Vorteile einer schnellen Datenübertragung und einer geringen Übertragungsverzögerung Weiterübertragung, Überprüfung und andere Verarbeitung.

Das Folgende ist ein einfacher UDP-Sendebeispielcode:

import socket

UDP_IP = '127.0.0.1'   # 目标IP地址
UDP_PORT = 5005        # 目标端口号
MESSAGE = b"Hello, World!"   # 要发送的数据

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送数据
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

# 关闭套接字
sock.close()

Das Folgende ist ein einfacher UDP-Empfangsbeispielcode:

import socket

UDP_IP = '127.0.0.1'   # 监听IP地址
UDP_PORT = 5005        # 监听端口号

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定套接字到指定IP地址和端口号
sock.bind((UDP_IP, UDP_PORT))

# 接收数据
data, addr = sock.recvfrom(1024)   # 一次最多接收1024字节的数据

print("Received message:", data)

# 关闭套接字
sock.close()

Es ist zu beachten, dass dies bei der UDP-Kommunikation aufgrund der Größenbeschränkung des Datenpakets der Fall sein kann Die Daten sind fragmentiert und die empfangenen Daten müssen zwischengespeichert und gespleißt werden, um die Datenintegrität sicherzustellen.

In IPv4-Netzwerken beträgt die maximale Länge eines UDP-Pakets 64 KB (65535 Bytes), einschließlich der Größe des IP-Headers und des UDP-Headers. In praktischen Anwendungen unterliegt die Größe von UDP-Paketen aufgrund von Einschränkungen der Netzwerkausrüstung und des Betriebssystems normalerweise einigen Einschränkungen. Beispielsweise können einige Router und Firewalls die maximale Länge von UDP-Paketen begrenzen, und einige Betriebssysteme erlegen möglicherweise auch einige Einschränkungen für UDP-Pakete auf.

Wenn Sie UDP zur Datenübertragung verwenden, müssen Sie auf die Größenbeschränkung der Datenpakete achten und versuchen, das Senden zu großer Datenpakete zu vermeiden. Sie können die Methode getsockopt() verwenden, um die UDP-Paketgrößenbeschränkung des Systems abzufragen, zum Beispiel:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
max_size = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
print(f"Max size of UDP packet: {max_size} bytes")

2. TCP

TCP ist ein zuverlässiges, verbindungsorientiertes Übertragungsprotokoll, das Zuverlässigkeits- und Integritätsgarantien für die Datenübertragung bietet Die Übertragungseffizienz ist relativ gering.

Das Folgende ist ein einfacher Beispielcode für einen TCP-Server und einen Client:

TCP-Server:

import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

# 创建TCP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
sock.bind((IP, PORT))

# 开始监听
sock.listen(1)

print(f"Server listening on {IP}:{PORT}...")

# 接受客户端连接
conn, addr = sock.accept()
print(f"Connected by {addr[0]}:{addr[1]}")

# 接收数据
data = conn.recv(1024)
print(f"Received data: {data.decode()}")

# 发送数据
msg = b"Hello, Client!"
conn.sendall(msg)

# 关闭连接
conn.close()

TCP-Client:

import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

# 创建TCP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
sock.connect((IP, PORT))

# 发送数据
msg = b"Hello, Server!"
sock.sendall(msg)

# 接收数据
data = sock.recv(1024)
print(f"Received data: {data.decode()}")

# 关闭连接
sock.close()

Es ist zu beachten, dass bei der TCP-Kommunikation die Datenübertragung über eine Verbindung erfolgen muss Zuerst muss die Verbindung hergestellt werden, dann werden die Daten übertragen und schließlich wird die Verbindung geschlossen. Da TCP ein verbindungsorientiertes Übertragungsprotokoll ist, erfordert es einen komplexen Verbindungsaufbauprozess wie einen Drei-Wege-Handshake. Es ist weniger effizient als UDP, weist jedoch eine höhere Zuverlässigkeit auf.

Das obige ist der detaillierte Inhalt vonWie implementiert Python die UDP- und TCP-Kommunikation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen