ホームページ  >  記事  >  バックエンド開発  >  Python が UDP を使用してクライアントとサーバーの通信を実装する方法

Python が UDP を使用してクライアントとサーバーの通信を実装する方法

WBOY
WBOY転載
2023-05-06 22:58:242087ブラウズ

UDP クライアント

UDP プロトコルを使用して継続的な対話を実装するクライアントのサンプル コード。 UDP はコネクションレス型プロトコルであるため、継続的な会話を実装する場合は特別な注意が必要であることに注意してください。

以下はサンプル コードです:

import socket
# 客户端配置
HOST = 'localhost'
PORT = 12345
# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    # 获取用户输入
    message = input("请输入要发送的消息:")
    # 发送消息到服务器
    client_socket.sendto(message.encode("utf-8"), (HOST, PORT))  # 注意,在不同操作系统上编码可能不同
    # 接收服务器传回的消息
    data, server_address = client_socket.recvfrom(1024)
    print(f"收到来自{server_address}的消息:{data.decode('utf-8')}")
# 关闭套接字
client_socket.close()

この例では、UDP ソケットを作成し、sendto()recvfrom() を利用します。データを送受信する機能。プログラムはユーザー入力を通じてメッセージを送信し続け、サーバーが応答するのを待って結果を表示します。 UDP はコネクションレス型プロトコルであるため、メッセージの信頼性と順序性は保証できないことに注意してください。実際の開発では、これらの要素を考慮して、より堅牢なコードを作成する必要がある場合があります。

UDP サーバー

以下は、UDP プロトコルを使用して継続的な会話を実装するサーバー側のサンプル コードです。

import socket
# 服务器配置
HOST = 'localhost'
PORT = 12345
# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定到地址和端口
server_socket.bind((HOST, PORT))
while True:
    # 接收客户端传来的消息
    data, client_address = server_socket.recvfrom(1024)
    print(f"来自{client_address}的消息:{data.decode('utf-8')}")
    # 获取用户输入
    message = input("请输入要发送的消息:")
    # 发送消息到客户端
    server_socket.sendto(message.encode("utf-8"), client_address)
# 关闭套接字
server_socket.close()

この例では、UDP ソケットを作成し、バインドします。指定されたアドレスとポートに送信します。次に、recvfrom() 関数を介してクライアントからメッセージを受信し、sendto() 関数を介してクライアントに応答を送り返します。プログラムはループを通じてデータを継続的に送受信することで、継続的な会話機能を実現します。

UDP はコネクションレス型プロトコルであるため、メッセージの信頼性と順序は保証できないことに注意してください。実際の開発では、これらの要素を考慮して、より堅牢なコードを作成する必要がある場合があります。

注意事項

1. コードを実行するときは、サーバー コードを最初に開始する必要があります;

2. デコードとエンコードに注意してください。オペレーティング システムが異なると、エンコードにより、例外メッセージが受信される可能性があります (Mac: utf-8 Windows: gbk)。

以上がPython が UDP を使用してクライアントとサーバーの通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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