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")
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 サイトの他の関連記事を参照してください。