PHPでソケットを実装する方法を詳しく解説

PHPz
リリース: 2023-04-11 13:30:01
オリジナル
4222 人が閲覧しました

PHP は Web 開発で広く使用されているサーバー側スクリプト言語ですが、Socket はサーバー アプリケーションまたはクライアント アプリケーションがデータを送受信するために使用できる一般的なインターフェイスです。 PHPはソケットを利用してネットワーク上でTCP/IPプロトコルに基づくソケット通信を行い、Webサーバー上でのデータのやりとりを実現します。

PHP には非常に便利な Sockets 拡張機能が用意されており、この拡張機能を使用すると、Socket プログラミングを簡単に実装できます。ここではPHPでソケットを実装する方法を紹介します。

Sockets 拡張機能のインストール

PHP 5.0.0 バージョン以降、Sockets 拡張機能はデフォルトで PHP に含まれているため、ほとんどの PHP にはすでにこの拡張機能が付属しています。ただし、PHP のバージョンが古すぎる場合、またはこの拡張機能が含まれていない場合は、自分でインストールする必要があります。次のコマンドを使用して Linux にインストールできます:

sudo apt-get install php7.0-sockets
ログイン後にコピー

Windows システムを使用している場合は、PHP 公式 Web サイトにアクセスして、対応する拡張ファイルをダウンロードし、その拡張ファイルを php.ini に追加してください。 iniファイル。

ソケット接続の作成

まず、PHP でソケット接続を作成するには、socket_create 関数を使用する必要があります。この関数を呼び出すときは、次の関数を渡す必要があります。

  1. domain: プロトコル ドメイン。一般的に使用されるものは、AF_INET、AF_INET6、AF_UNIX です。最も一般的に使用されるものは、IPv4 プロトコルを表す AF_INET です。IPv6 プロトコルを使用する場合は、 、AF_INET6;
  2. type: type、一般的に使用されるものは SOCK_STREAM、SOCK_DGRAM、SOCK_RAW で、最も一般的に使用されるのは SOCK_STREAM で、ストリームベースの TCP 接続を表します;
  3. protocol : プロトコル。一般的に使用されるのは 0、IPPROTO_TCP、IPPROTO_UDP で、このうち 0 は送信方式の自動選択を示します。

以下は、socket_create 関数を使用して接続を確立する例です:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
ログイン後にコピー

接続が正常に作成された後、ソケットをローカル ポートにバインドする必要があります:

socket_bind($socket, 0, 8080);
ログイン後にコピー

ここでは、ソケットはローカル IP アドレスとポート番号 8080 にバインドされています。特定の IP アドレスにバインドする場合は、2 番目のパラメーターをその IP アドレスに設定できます。

接続をリッスンする

ソケットがローカル ポートにバインドされたら、クライアント接続リクエストのリッスンを開始できます。これは、socket_listen 関数を使用して実現する必要があります。

socket_listen($socket);
ログイン後にコピー

接続リクエストのリッスンを開始する前に、ソケットのいくつかのパラメータを設定したい場合は、socket_set_option 関数を使用できます。例:

socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
ログイン後にコピー

この例では、SO_REUSEADDR オプションを 1 に設定します。これは、ローカル アドレスを再利用できることを意味し、それによって「アドレスはすでに使用されています」エラーを回避します。

接続リクエストの受信

クライアントがソケットに接続する場合は、socket_accept 関数を使用して接続リクエストを受信する必要があります:

$clientSocket = socket_accept($socket);
ログイン後にコピー

Whenクライアントが接続すると、この関数はクライアントとの通信に使用できる新しいソケット ハンドルを返します。

データの送受信

ソケット接続が確立されると、クライアントとサーバーは、その間に確立されたソケット接続を介してデータを送受信できます。

  • データの送信

サーバーは、socket_write 関数を使用して、クライアントにデータを送信します。

$msg = "Hello, Client!";
socket_write($clientSocket, $msg, strlen($msg));
ログイン後にコピー

この例では、メッセージをクライアントに送信します。クライアント側。

  • データの受信

クライアントはサーバーにデータを送信し、サーバーはsocket_read関数を通じてデータを受信できます:

$msg = socket_read($clientSocket, 1024);
ログイン後にコピー

この例では、毎回クライアントから 1024 バイトのデータを受信し、それを $msg 変数に保存します。

socket_read 関数は、クライアントが接続を閉じたことを示す空の文字列を返す場合があることに注意してください。

接続を閉じる

データ転送が完了したら、接続を閉じる必要があります。これは、socket_close 関数を使用して実装する必要があります。

socket_close($socket);
socket_close($clientSocket);
ログイン後にコピー

このうち、最初のソケット ハンドルはサーバー ソケットを表し、2 番目のソケット ハンドルはクライアントと確立されたソケット接続を表します。

概要

PHP では、Socket 拡張機能を使用してソケット プログラミングを実現できます。ソケット接続を作成するにはsocket_create関数、ソケットをローカルポートにバインドするにはsocket_bind関数、リクエストのリスニングを開始するにはsocket_listen関数、接続リクエストを受信するにはsocket_accept関数、データを受信するにはsocket_read関数、socket_writeを使用します。データを送信する関数、そして最後に接続を閉じるためのsocket_close関数です。 PHP ソケット プログラミングを学習したい場合は、この記事で提供されている例に基づいて練習できます。

以上がPHPでソケットを実装する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート