はじめに
ソケットはプロセス間通信に使用されます。プロセス間通信は通常、クライアント/サーバー モデルに基づいています。この時点で、クライアント/サーバーは相互に対話できるアプリケーションです。クライアントとサーバー間の対話には接続が必要です。ソケット プログラミングは、アプリケーション間の対話型接続を確立する役割を果たします。
この記事では、PHP を使用して単純なクライアントサーバーを作成する方法を学びます。また、クライアント アプリケーションがサーバーにメッセージを送信する方法と、サーバーからメッセージを受信する方法についても学習します。
コードを使用する
目的: 文字列メッセージをサーバーに送信するクライアントを開発します。サーバーは同じ情報を反転してクライアントに返します。
PHPサーバー
ステップ 1: 「ホスト」や「ポート」などの変数を設定します
$host = "127.0.0.1";
$ポート = 5353;
// タイムアウトなし
set_time_limit(0);
ポート番号には、1024 ~ 65535 の任意の正の整数を指定できます。
ステップ 2: ソケットを作成する
$socket =ソケット_create(AF_INET, SOCK_STREAM, 0) または die("ソケットn を作成できませんでした");
ステップ 3: ソケットをポートとホストにバインドする
作成されたソケットリソースはIPアドレスとポート番号にバインドされます。
$result =socket_bind($socket, $host, $port) または die("ソケットn にバインドできませんでした");
ステップ 4: ソケット リスニングを開始する
IP とポートにバインドした後、サーバーはクライアントの接続を待ち始めます。接続がなくなるまで待機します。
$result =socket_listen($socket, 3) または die("ソケット リスナーを設定できませんでした");
ステップ 5: 接続を受け入れる
この関数は、作成されたソケットからの受信接続リクエストを受け入れます。クライアント ソケットからの接続を受け入れた後、この関数は別のソケット リソースを返します。このリソースは実際には、対応するクライアント ソケットとの通信を担当します。ここでの「$spawn」は、クライアント ソケットとの通信を担当するソケット リソースです。
$spawn =socket_accept($socket) または die("受信接続を受け入れられませんでしたn");
ここまででサーバーソケットの準備は完了しましたが、実際にはこのスクリプトは何も行いません。したがって、上記の目標を達成し続けるために、クライアント ソケット メッセージを読み取り、受信したメッセージを反転してクライアント ソケットに送り返します。
ステップ 6: クライアントソケットからメッセージを読み取る
$input =socket_read($spawn, 1024) または die("入力n を読み取れませんでした");
ステップ 7: メッセージを反転する
$output = strrev($input) . "n";
ステップ 8: クライアントソケットにメッセージを送信します
socket_write($spawn, $output, strlen ($output)) または die("出力n を書き込めませんでした");
ソケットを閉じる
socket_close($spawn);
ソケットクローズ($ソケット);
これでサーバー側は完了です。ここで、PHP クライアントを作成する方法を学びます。
PHPクライアント
最初の 2 つのステップはサーバー側と同じです。
ステップ 1: 「ホスト」や「ポート」などの変数を設定します
$host = "127.0.0.1";
$ポート = 5353;
// タイムアウトなし
set_time_limit(0);
注: ここでのポートとホストは、サーバーで定義されているものと同じである必要があります。
ステップ 2: ソケットを作成する
$socket =ソケット_create(AF_INET, SOCK_STREAM, 0) または die("ソケットn を作成できませんでした");
ステップ 3: サーバーに接続します
$result =socket_connect($socket, $host, $port) または die("サーバーに接続できませんでした");
現時点ではサーバーとは異なり、クライアントソケットはポートとホストにバインドされていません。代わりに、サーバー ソケットに接続し、クライアント ソケットからの接続を受け入れるのを待ちます。このステップでは、クライアント ソケットからサーバー ソケットへの接続を確立します。
ステップ 4: サーバーソケットに書き込む
socket_write($socket, $message, strlen($message)) または die("サーバーにデータを送信できませんでした");
このステップでは、クライアントソケットからのデータがサーバーソケットに送信されます。
ステップ 5: サーバーからの応答を読む
$result =socket_read ($socket, 1024) または die("サーバー応答n を読み取れませんでした");
echo "サーバーからの応答:".$result;
ステップ 6: ソケットを閉じる
socket_close($socket);
完全なコード
サーバーserver.php)
// いくつかの変数を設定します
$host = "127.0.0.1";
$ポート = 25003;
// タイムアウトしないでください!
set_time_limit(0);
// ソケットを作成します
$socket =ソケット_create(AF_INET, SOCK_STREAM, 0) または die("ソケットn を作成できませんでした");
// ソケットをポートにバインドします
$result =socket_bind($socket, $host, $port) または die("ソケットn にバインドできませんでした");
// 接続のリッスンを開始します
$result =socket_listen($socket, 3) または die("ソケット リスナーを設定できませんでした");
// 受信接続を受け入れます
// 通信を処理するために別のソケットを生成します
$spawn =socket_accept($socket) または die("受信接続を受け入れられませんでしたn");
// クライアント入力を読み取ります
$input =socket_read($spawn, 1024) または die("入力n を読み取れませんでした");
// 入力文字列をクリーンアップします
$input = トリム($input);
echo "クライアントメッセージ: ".$input;
// クライアント入力を逆にして送り返す
$output = strrev($input) 。 「ん」;
socket_write($spawn, $output, strlen ($output)) または die("出力n を書き込めませんでした");
// ソケットを閉じる
ソケットクローズ($spawn);
ソケットクローズ($ソケット);
客户端client.php)
$host = "127.0.0.1";
$ポート = 25003;
$message = "こんにちはサーバー";
echo "サーバーへのメッセージ:".$message;
// ソケットを作成します
$socket =ソケット_create(AF_INET, SOCK_STREAM, 0) または die("ソケットn を作成できませんでした");
// サーバーに接続します
$result =socket_connect($socket, $host, $port) または die("サーバーに接続できませんでした");
// 文字列をサーバーに送信します
socket_write($socket, $message, strlen($message)) または die("サーバーにデータを送信できませんでした");
// サーバー応答を取得します
$result =socket_read ($socket, 1024) または die("サーバー応答を読み取れませんでしたn");
echo "サーバーからの応答:".$result;
// ソケットを閉じる
ソケットクローズ($ソケット);
上記の文書server.phpとclient.php)を構築した後、以下の操作を実行します:
许可证
この文章、および関連するソース コードおよびファイルは、Code Project Open License (CPOL) によって許可されています。