PHP を使用して UDP 通信を実装するにはどうすればよいですか?
はじめに:
ユーザー データグラム プロトコル (略して UDP) は、コネクションレス型のトランスポート層プロトコルであり、データ送信の信頼性と順序を保証するものではありません。伝送制御プロトコル (TCP) と比較して、UDP はオーバーヘッドが低く、速度が速いため、リアルタイム要件が高く、データ損失が許容できるシナリオに適しています。この記事では、PHP 言語を使用して UDP 通信を実装する方法と、対応するコード例を紹介します。
UDP の送信者と受信者は、通信に同じソケットを使用する必要があります。 PHP では、ソケット拡張機能によって提供される関数を通じて UDP 通信を実装できます。
ステップ 1: UDP ソケットの作成
socket_create 関数を使用して、UDP パケットの送受信に使用できる UDP ソケットを作成します。構文は次のとおりです。
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
AF_INET
ここでは IPv4 アドレスを使用することを意味し、SOCK_DGRAM
はデータグラム UDP ソケットを使用することを意味し、SOL_UDP
は UDP プロトコルを使用することを意味します。 。
ステップ 2: ポートのバインド
UDP データを送受信する前に、ソケットを特定の IP アドレスとポートにバインドする必要があります。バインドは、socket_bind 関数を通じて実現されます。構文は次のとおりです。
socket_bind($socket, $local_ip, $local_port);
$local_ip
は、ローカル IP アドレスを表します。これは、IPv4 アドレスまたは IPv6 アドレスです。 $local_port
はローカル ポート番号を表します。
ステップ 3: UDP データ パケットを送信する
socket_sendto 関数を使用して、指定されたターゲット アドレスに UDP データ パケットを送信します。構文は次のとおりです。
socket_sendto($socket, $data, $length, 0, $remote_ip, $remote_port);
$data
は送信するデータを表し、$length
はデータ長を表し、$remote_ip
は送信するデータを表します。ターゲット IP アドレス、$remote_port
はターゲット ポート番号を表します。
ステップ 4: UDP データ パケットを受信する
socket_recvfrom 関数を使用して、指定された送信元アドレスから UDP データ パケットを受信します。構文は次のとおりです。
socket_recvfrom($socket, $buffer, $length, 0, $from_ip, $from_port);
$buffer
は受信バッファを表し、$length
は受信する最大データ長を表し、$from_ip
はデータ パケットの送信元 IP アドレスを表し、$from_port
は送信元ポート番号を示します。
サンプル コード:
以下は、クライアントがサーバーにメッセージを送信し、サーバーから応答を受信するように、PHP を使用して UDP 通信を実装する方法を示す簡単なサンプル コードです。
サーバー コード:
// 创建UDP套接字 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // 绑定端口 socket_bind($socket, '127.0.0.1', 8888); // 接收客户端的消息 socket_recvfrom($socket, $recv_buffer, 1024, 0, $client_ip, $client_port); echo "Received message from client: ".$recv_buffer." "; // 向客户端发送回复 $message = "Hello, client!"; socket_sendto($socket, $message, strlen($message), 0, $client_ip, $client_port); // 关闭套接字 socket_close($socket);
クライアント コード:
// 创建UDP套接字 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // 发送消息到服务端 $message = "Hello, server!"; socket_sendto($socket, $message, strlen($message), 0, '127.0.0.1', 8888); // 接收服务端的回复 socket_recvfrom($socket, $recv_buffer, 1024, 0, $server_ip, $server_port); echo "Received reply from server: ".$recv_buffer." "; // 关闭套接字 socket_close($socket);
概要:
PHP 言語とソケット拡張機能が提供する機能を組み合わせて使用することで、簡単に実装できます。 UDP通信。ソケットの作成、ポートのバインド、パケットの送受信などを行うことで、単純なメッセージングを実装できます。一方で、UDP はコネクションレスという性質上、データの信頼性や順序性が保証されないため、実際の利用においては、特定のシナリオに応じて処理する必要があることに注意する必要があります。
以上がPHPを使用してUDP通信を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。