ホームページ >バックエンド開発 >PHPチュートリアル >phpによるソケット通信機構例の詳細説明、socket_PHPチュートリアルの詳細説明

phpによるソケット通信機構例の詳細説明、socket_PHPチュートリアルの詳細説明

WBOY
WBOYオリジナル
2016-07-13 10:10:18925ブラウズ

PHPでのソケット通信機構例の詳細説明、ソケットの詳細説明

この記事の例では、php でのソケット通信メカニズムと使用法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

1.ソケットとは

ソケットとは何ですか? いわゆるソケットは通常「ソケット」とも呼ばれ、IP アドレスとポートを表すために使用されます。アプリケーションは通常、「ソケット」を通じてネットワークにリクエストを送信するか、ネットワークリクエストに応答します。端的に言えば、それはコミュニケーションのメカニズムです。これは、銀行、通信部門、その他の部門の電話顧客サービス部門に似ています。電話をかけると、顧客サービス部門がソケットのサーバー側に相当し、誰かが通話を終了するまではクライアント側に相当します。もちろん、お客様サービス部門の電話交換機が重複することはありません。

ソケットがどのように機能するかを説明するために、以下に例を示します。アプリケーション層をベースに開発する場合、必ずしも原理を理解する必要はありませんが、知っていたほうが良いでしょう。インターネット上にはソケットに関する php API があります。置くだけで使えます。

2. ソケットサーバーserver.php

コードをコピーします コードは次のとおりです:
// サーバー側のソケットを作成します
$tcp = getprotobyname("tcp"); $socket = ソケット作成(af_inet, sock_stream, $tcp); socket_bind($socket, '127.0.0.1', 10008); //監視対象のポートをバインドします
socket_listen($socket); //リスニングポート

//データを初期化し、クライアントと通信します
$buffer = "接続"; while (true) {
// ソケット接続を受け入れます
$connection = ソケット_accept($socket); If(!$connection){
「接続失敗」をエコーし​​ます
}その他{
エコー「ソケット接続」を使用して外出します // 情報データをクライアントに送信します
if ($buffer != "") {
echo "クライアントにデータを送信します"; ソケット_write($connection, $buffer . " "); echo "ソケットに書き込みました";                                                                                               echo "バッファーにデータがありません" ;                                                                                         // クライアントから情報を取得します
while ($data = @socket_read($connection, 1024, php_normal_read)) {
printf( "buffer:"。$ data。 ""); //情報を取得し、クライアントにフィードバックを送信します
socket_write($connection, "受信した情報"); }
}

ソケット_クローズ($接続)
//ソケットを閉じる
printf("ソケットを閉じました "); }
?>


3. ソケットクライアント client.php




コードをコピーします

コードは次のとおりです:
// クライアントのソケット接続を確立します
$ソケット = ソケット_作成(af_inet, sock_stream, sol_tcp); $connection =ソケット_connect($socket, '127.0.0.1', 10008); //サーバー側のソケットに接続します

while ($buffer = @socket_read($socket, 1024, php_normal_read)) {
//サーバーはクライアントにステータスを伝えます
If (preg_match("/not connect/",$buffer)) {
エコー「接続しないでください」 壊す; } その他 {
//サーバーから送信された情報
エコー "バッファデータ: " . $buffer ;
echo "ソケットへの書き込み"; // 顧客の情報をチャネルに書き込み、サーバーに渡します
If (!socket_write($socket, "何らかのデータ ")) {
echo "書き込みに失敗しました ";                                                                            //情報を受信した後、サーバーは応答情報を返します
while ($buffer =socket_read($socket, 1024, php_normal_read)) {
echo "サーバーに送信されました: サーバーからのデータ応答は次のとおりでした: "
; }

}
}
?>


4. 通信機構の図(待機時間に関係なく自動的にソケットを閉じる)


簡単な説明。説明する前に、サーバーとクライアントを実行するために php コマンドを使用する必要がある理由を説明します。これにより、クライアントにはブラウザ上でアクセスできるようになり、少なくとも接続が確立されます。タイムアウト。これはなぜでしょうか? ソケットを作成すると、クライアントが接続を希望しているかどうかが常に監視されるからです。
ソケット通信の確立には 2 つのソケット チャネルが必要です。1 つはサーバーによって作成され、もう 1 つはクライアントによって作成されます。
1行目、サーバーはソケットチャネルを作成し、情報をキャッシュに置き、クライアントの接続を待ちます 2 行目、クライアントはソケット チャネルを作成し、サーバーに接続し、通信用のサーバー側の情報を取得し、送信する情報をチャネルに送信します

3 行目、サーバーはクライアントから情報を取得し、私が情報を受け取ったことをクライアントに伝えます。伝えたい情報をチャンネルに送ってください

4行目、クライアントはサーバーから確認情報を取得します

この時点で通信は完全に確立されており、データ送信完了後、サーバーはソケット通信を切断します。

1 ソケットサーバーを実行します

コードをコピーします

コードは次のとおりです:


[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php

インタラクティブモードが有効になりました これに関してどのような取り組みをしましたか? a はポート 10008 をリッスンしました

コードをコピーします

コードは次のとおりです:

[zhangy@blackghost ~]$ netstat -an |grep listen |grep 10008

tcp 0 0 127.0.0.1:10008 0.0.0.0:* 聞いてください [zhangy@blackghost ~]$
b 情報をキャッシュに送信します

コードをコピーします

コードは次のとおりです:

$buffer = "connect";

上のコードを見てください

2 ソケットクライアントを実行します
コードをコピーします
コードは次のとおりです:

[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/client.php
インタラクティブモードが有効になりました

バッファデータ: 接続 ソケットへの書き込み サーバーに送信されました: 一部のデータ
サーバーからの応答: 情報を受信しました

3 サーバーに戻ります



コードをコピーします

コードは次のとおりです:

[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php
インタラクティブモードが有効になりました
ソケットが接続されました クライアントにデータを送信 ソケットに書き込みました バッファ: いくつかのデータ
ソケットを閉じました

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.com本当http://www.bkjia.com/PHPjc/936797.html技術記事 PHPのソケット通信の仕組みを例を交えて詳しく解説 ソケットの詳細を解説 この記事では、PHPのソケット通信の仕組みと使い方について例を交えて解説します。参考のためにみんなで共有してください。具体的な分析は以下の通りです: 1. ソケットとは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。