ホームページ  >  記事  >  バックエンド開発  >  Python はどのように UDP および TCP 通信を実装しますか?

Python はどのように UDP および TCP 通信を実装しますか?

王林
王林転載
2023-05-08 11:46:071885ブラウズ

1. UDP

UDP はコネクションレスで信頼性の低い伝送プロトコルであり、TCP に比べてデータ伝送速度が速く、伝送遅延が少ないという利点がありますが、データの信頼性を保証するものではありません。送信には、アプリケーション層でデータの再送信、検証、その他の処理を実行する必要があります。

以下は、単純な UDP 送信サンプル コードです。

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()

以下は、単純な UDP 受信サンプル コードです。

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()

UDP 通信では、データ パケットのサイズ制限に合わせて、送信データを断片化する必要がある場合があり、データの整合性を確保するために受信データをキャッシュして結合する必要がある場合もあります。

IPv4 ネットワークでは、UDP パケットの最大長は、IP ヘッダーと UDP ヘッダーのサイズを含めて 64KB (65535 バイト) です。実際のアプリケーションでは、ネットワーク機器とオペレーティング システムの制限により、通常、UDP パケットのサイズはいくつかの制限を受けます。たとえば、ルーターやファイアウォールによっては UDP パケットの最大長が制限されている場合があり、オペレーティング システムによっては UDP パケットに制限が課される場合もあります。

データ送信に UDP を使用する場合は、データ パケットのサイズ制限に注意し、大きすぎるデータ パケットの送信を避ける必要があります。 getsockopt() メソッドを使用して、UDP パケット サイズに関するシステムの制限を照会できます (例:

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 は、データを提供する信頼性の高い接続指向の伝送プロトコルです。伝送の信頼性と完全性は保証されていますが、伝送効率は比較的低くなります。

次は、単純な TCP サーバーとクライアントのサンプル コードです。

TCP サーバー:

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 クライアント:

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()

注意が必要です重要なのは、TCP 通信では、接続を介してデータ送信を実行する必要があるため、最初に接続を確立し、次にデータを送信し、最後に接続を閉じる必要があるということです。 TCP はコネクション指向の伝送プロトコルであるため、3 ウェイ ハンドシェイクなどの複雑な接続確立プロセスが必要となり、効率は UDP より劣りますが、信頼性は高くなります。

以上がPython はどのように UDP および TCP 通信を実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。