php ではソケット通信を実装できます 実装方法は、 1. クライアントで「socketsocket_create();」を作成し、サーバーへの接続要求「socket_connect();」 2. 「socketsocket_create()」を作成します" サーバー上で ;" そして IP とポート番号をバインドします "socket_bind();"; 3. クライアントのメッセージを読み取るか、または "socket_wirte();socket_read" を通じてクライアントにメッセージを書き込みます。
このチュートリアルの動作環境: Windows 10 システム、PHP バージョン 8.1、DELL G3 コンピューター
php はソケット通信を実現できますか? ?
socket PHP: 詳細かつシンプルなソケット TCP 通信 PHP 実装
1 背景の紹介
目標: 使用したいと考えていますソケット このサーバーの機能は、複数のクライアントからの接続を受け入れ、相互通信を完了することです。たとえば、クライアント A とクライアント B が同時にサーバー S に接続されています。クライアント A はサーバー S にメッセージを送信します。サーバー S は A のメッセージを B に転送します。同様に、B のメッセージも S を介して A に転送できます。この により、クライアント A とクライアント B 間の相互通信が実現されます。 今回はクライアントとサーバー間の接続と通信のみを実装し、サーバーの転送機能は当面実装しません。
2 TCP の簡単な紹介
2.1 TCP の「スリーウェイ ハンドシェイク」
TCP の 3 ウェイ ハンドシェイクでは、次のことができます。サーバーとクライアントが正常に通信できることを確認します。スリーウェイ ハンドシェイク プロセス: このプロセスの説明については、以下のリンクをクリックして参照できます。 参考: https://www.php.cn/link/70203474234c15a59de1eacc053f5690
#2.2 IP とポート
サーバーには次のものが必要です。 IP または TCP で通信する場合は、ポート番号も指定する必要があります。 カスタマー サービス側には IP が必要であり、TCP と通信する場合はポート番号も提供する必要があります。
個人的な理解: IP は住所であり、家に相当します。通信を確立する必要がある場合、まず家がどこにあるのかを知る必要があります。そうでない場合、どこに情報を送信すればよいでしょうか? PORT ポート、ポート番号はこの家のドアとして理解できます。このドアでメッセージを送信したり、このドアからメッセージを受信したりするには、ドアを指定する必要があります。
Client のいくつかの関連機能:
ソケットの作成socket_create();
サーバーからの接続のリクエストsocket_connect();
メッセージの送信サーバーへ /サーバーメッセージを受け入れるsocket_wirte(); /socket_read();
ソケットを閉じるsocket_close();
Server :
サーバーはソケットを作成し、IP とポートをバインドして、リスニング状態に入り、クライアントが接続を開始するのを待ちます。
#クライアントはソケットを作成し、指定されたサーバー IP およびポートに接続します。
サーバーは、クライアントによって開始された接続を受け入れます。
双方が相互にデータを送信できます
双方がソケットを閉じます。
#A B ##ソケットの作成 ソケットを作成し、「アクセスを許可」を設定します。 IP とポート #特定の (またはすべての) IP と特定のポートをリッスンし、クライアントを待機するブロッキングに入ります#指定されたサーバー IP/ポートへの接続を開始します #クライアントからの接続を受け入れます A ##双方が接続を確立しました メッセージを送信メッセージを送信 ##コミュニケーション終了後、A と B は次のことに同意します ソケットを閉じますA # #B これは簡単な通信プロセスであり、周期送信や異常検出などの詳細です。
3 練習を始める
3.1 PHP のインストールと環境構成
PHP をインストールする 。ここでは XAMPP を直接インストールしましたが、このソフトウェアが自動的に PHP をインストールしました。 PHP 言語を初めて使用する場合は、Baidu から PHP を直接インストールすることも、XAMPP をインストールすることもできます。
システム環境構成 。プログラムを実行するときは cmd を通じて実行するため、システム環境変数を構成する必要があります。設定プロセスについては、リンク: PHP 環境変数の設定 を参照してください。
phpコマンドが実行できるかどうかを確認してください 。手順 1 と 2 が完了したら、cmd を実行してコマンド php -v
を実行すると、操作が完了すると PHP のバージョン番号が表示されます。
##3.2.1 プログラムを作成する
新しいプログラムを作成するフォルダー socket、このフォルダーの下に新しいテキスト ドキュメントを作成し、名前を client.php 注: 私のフォルダーはデスクトップ に作成されますOpen client.php 注: 普段 php エディタを持っていない場合は、この時点でメモ帳を使用して client.php を直接開くことができます write program 注: ここでプログラムを直接示してコメントします。2.2 のコミュニケーション プロセスに基づいて理解できます。ご質問がある場合は、メッセージを残してください。 #<?php
$PORT = 请输入端口号; //端口号请查看博文:*3.2.2 程序执行*。设置有效端口:
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建socket/参数1:代表IPV4/参数2:流传输/参数3:TCP/
$result = socket_connect($client, "122.114.122.174", $PORT); //向指定地址/端口发出连接请求,连接结果返回到resule
if($result == false){ //这里我们简单的对连接结果进行响应/为了Debug方便
echo "ERROR CONNECT\n";
die();
} else {
echo "CONNECTED\n";
}
$data = "Hello World\n"; //建立将要发送的消息
socket_write($client, $data); //将消息发送出去
socket_close($client); //关闭socket
?> ログイン後にコピー
プログラムを作成した後、直接コピーすることも、 直接ダウンロードすることもできます。 注: プログラムを直接実行すると、エラーが報告されます。ポート番号を指定する必要があります。プログラムの実行方法に関する次のセクションに進んでください。 3.2.2 プログラムの実行 プログラムを取得します。前のセクションで、簡単なカスタマー サービス プログラムがすでに完成しました。 をクリックしてダウンロードしてください。 有効なポートを見つけます 。現在サーバーがないため、デバッグには他の人から提供されたサーバー アドレスとポートを使用する必要があります。 操作手順: 1.ここをクリックして Web ページを開きます 2.ページの下部にある 122.114.122.174:xxxxx を見つけます。 3. xxxxx の部分をプログラムの 2 行目に置き換えて保存します。 Web ページの操作: プログラムの操作: cmd を開きます。 PHP 環境変数が設定されていない場合は、次を参照してください。 3.1 PHP のインストールと環境設定 コマンド cddesktop/socket を実行します。その目的は、ソケット フォルダーに移動し、独自のフォルダーの場所に応じて関連するパスを入力することです。
クライアント プログラム php client.php を実行します。この時点で PHP 致命的エラーが報告された場合は、 クリックして解決策を表示してください。
最後に、情報が Web ページに受信されたことがわかります。 注: プログラムの実行後、CONNECTED が出力されない場合は、しばらく待ってから ERROR CONNET が返されることを確認してください。これは、 ポート番号の有効期限が切れているためです (3 分間のみ使用可能)。Web ページに戻って更新し、 を変更してください。 正しく実行できない場合は、メッセージを残してください! 3.3 ローカル サーバーおよびクライアント プログラム 自分で入力したくない場合は、 ここをクリックしてダウンロードし、「3.3.3 プログラムの実行」に移動してください。 3.3.1 写程序/服务器新建一个文件夹socket (如有,请忽略),在该文件夹下新建文本文档并改名为server.php NOTE:我的文件夹建在桌面上 打开server.php NOTE:如果你平时没有php的编辑器,这个时候可以直接用记事本打开server.php 写入程序 NOTE:程序我这里直接给出,并给予注释,大家可以结合2.2通信过程进行理解,如有疑问请留言 <?php
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建socket/参数解释同客服端
socket_bind($server, "0.0.0.0", 12345); //绑定端口和IP/0.0.0.0表示允许任意地址发起连接/12345表示允许12345端口号进行连接
socket_listen($server); //进入监听
$connection = socket_accept($server); //接受请求并建立连接
$data = socket_read($connection, 1024); //接受数据
echo $data; //打印数据
socket_close($server);//关闭socket
?> ログイン後にコピー
3.3.2 写程序/客户端 打开文件夹socket (server.php所在文件夹),在该文件夹下新建文本文档并改名为client.php (如有,请打开直接修改程序即可) NOTE:我的文件夹建在桌面上 打开client.php NOTE:如果你平时没有php的编辑器,这个时候可以直接用记事本打开client.php 写入程序 NOTE:程序我这里直接给出,并给予注释,大家可以结合2.2通信过程进行理解,如有疑问请留言 <?php
$PORT = 12345; //与server端口匹配
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建socket/参数1:代表IPV4/参数2:流传输/参数3:TCP/
$result = socket_connect($client, "127.0.0.1", $PORT); //向指定地址/端口发出连接请求,连接结果返回到resule/127.0.0.1指本地IP
if($result == false){ //这里我们简单的对连接结果进行响应/为了Debug方便
echo "ERROR CONNECT\n";
die();
} else {
echo "CONNECTED\n";
}
$data = "Hello World\n"; //建立将要发送的消息
socket_write($client, $data); //将消息发送出去
socket_close($client); //关闭socket
?> ログイン後にコピー
3.3.3 程序执行
获取程序 。通过上节,我们已经有一个本地客服端程序和一个服务器程序,下载请点击
打开cmd 。如果没有配置PHP的环境变量请查看:3.1
执行命令 cd desktop/socket
。注意:这个路径需要根据自己实际情况填写,直接下载的应该是cd desktop/simple-socket-php/local-client-server
主要目的是为了找到server.php所在的文件夹 ,根据自己文件夹位置填写相应路径。
执行服务器程序 php server.php
。我们发现cmd卡住了,这个时候在等待客户端连接进来。这个时候如果报错PHP Fatal error,请查看点击查看解决方法 (如果想强制退出进程按下Ctrl+C
)
再打开一个cmd 。
执行命令 cd desktop/socket
。注意:这个路径需要根据自己实际情况填写,直接下载的应该是cd desktop/simple-socket-php/local-client-server
主要目的是为了找到client.php所在的文件夹 ,根据自己文件夹位置填写相应路径。
执行客户端程序 php client.php
。(如果想强制退出进程按下Ctrl+C
) 如果服务器没有反应,请按下Ctrl+C
结束进程,重新按照顺序(先在一个CMD执行server.php,再在另一个CMD执行client.php)执行程序。如有疑问,请留言。
4 结束
到这里,我们已经实现了基本的socket通信,当然,这个程序是完全不能实际应用的,如果想要实际应用,需要增加很多细节方面的东西,有一个做的比较好的Workerman,大家可以自行搜索。 之后我会更新如何把这个server.php在自己的阿里云服务器上面运行,这样,我们就可以随时连接进去实现客服端的相互通信了。如果有兴趣可以关注等待。
推荐学习:《PHP视频教程 》
以上がPHPでソケット通信を実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。