ホームページ >バックエンド開発 >PHPチュートリアル >PHPソケットプログラミングプロセスを詳しく解説_PHPチュートリアル

PHPソケットプログラミングプロセスを詳しく解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:45:37816ブラウズ

PHPソケットプログラミングプロセスの詳細な説明

はじめに

ソケットはプロセス間通信に使用されます。プロセス間通信は通常、クライアント/サーバー モデルに基づいています。この時点で、クライアント/サーバーは相互に対話できるアプリケーションです。クライアントとサーバー間の対話には接続が必要です。ソケット プログラミングは、アプリケーション間の対話型接続を確立する役割を果たします。

この記事では、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) によって許可されています。



http://www.bkjia.com/PHPjc/1040141.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1040141.html技術記事 PHP ソケットは、プロセス間通信に使用されます。プロセス間通信は、通常、クライアント サービス モデルに基づいています。このとき、クライアント サービス ターミナルは、相互に通信できるアプリケーション プログラムです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。