前回までで、PHP でシリアルポートを使った、AQUOS用のリモコンができましたが、LANにつながっている別のコンピュータからも操作したくなりました。
そこで、ソケット通信を使ってみたいと思います。
この通信は送りつけるだけなので、UDP にしました。
ソケット通信メモ http://www.ne.jp/asahi/hishidama/home/tech/socket/index.htmlなどを参考にすると、UDP通信は、
の手順で行います。
さて、UDP通信の手順がわかったところで、具体的に PHP でどのような関数を使うのでしょうか。
PHP: PHP マニュアル - Manual http://www.php.net/manual/jp/で目次を見たところ、それらしいものはないようですが、「関数リファレンス」-> 「その他のサービス」-> 「ソケット」にありました。
この機能は、標準で準備されていますね。ただし、Windows では、
php_sockets.dll
を利用し、coLinux 等で、PHPをコンパイルしてインストールする場合は、
configure にオプション --enable-sockets を指定することにより使用可能になります
ので、注意が必要です。
マニュアルによると、create (上の手順で、socket にあたるもの)して得られるソケットを「ソケットリソース」と呼ぶようです。このソケットリソースを使って、データの送信や受信をするわけです。
先ほどの手順に、対応する PHP の関数を当てはめると、
になります。マニュアルを見ながら、各関数について調べていきたいと思います。
最初は、socket ソケットの生成です。今回の通信は、UDP なので、
です。$socket が、生成されたソケットリソースですね。
bind は、
と、サーバのIPアドレスを、127.0.0.1 のような文字列で指定でき、サーバが使うポート番号も指定できます。
recvfrom 受信は、PHPのマニュアルのサンプルどおりにしたほうが無難です。つまり、
です。これで指定されたポート番号で受信待ちになります。
一方 sendto 送信は、これも PHP のサンプルを参考に、
です。
しかし、このマニュアルは本当に良くできていますね。各関数にサンプルプログラムがあるので分かりやすいです。次回、プログラムを作成しますが、このサンプルプログラムを大いに活用したいと思います。
そこで、ソケット通信を使ってみたいと思います。
この通信は送りつけるだけなので、UDP にしました。
ソケット通信メモ http://www.ne.jp/asahi/hishidama/home/tech/socket/index.htmlなどを参考にすると、UDP通信は、
クライアント サーバ socket socket bind recvfrom (ここで、受信待ちになる) sendto (データを送信する) close close
の手順で行います。
さて、UDP通信の手順がわかったところで、具体的に PHP でどのような関数を使うのでしょうか。
PHP: PHP マニュアル - Manual http://www.php.net/manual/jp/で目次を見たところ、それらしいものはないようですが、「関数リファレンス」-> 「その他のサービス」-> 「ソケット」にありました。
この機能は、標準で準備されていますね。ただし、Windows では、
php_sockets.dll
を利用し、coLinux 等で、PHPをコンパイルしてインストールする場合は、
configure にオプション --enable-sockets を指定することにより使用可能になります
ので、注意が必要です。
マニュアルによると、create (上の手順で、socket にあたるもの)して得られるソケットを「ソケットリソース」と呼ぶようです。このソケットリソースを使って、データの送信や受信をするわけです。
先ほどの手順に、対応する PHP の関数を当てはめると、
クライアント サーバ socket_create socket_create socket_bind socket_recvfrom socket_sendto socket_close socket_close
になります。マニュアルを見ながら、各関数について調べていきたいと思います。
最初は、socket ソケットの生成です。今回の通信は、UDP なので、
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
です。$socket が、生成されたソケットリソースですね。
bind は、
socket_bind($socket, IPアドレス, ポート番号);
と、サーバのIPアドレスを、127.0.0.1 のような文字列で指定でき、サーバが使うポート番号も指定できます。
recvfrom 受信は、PHPのマニュアルのサンプルどおりにしたほうが無難です。つまり、
$from = ""; $port = 0; socket_recvfrom($socket, $buf, 受け取る文字列長, 0, $from, $port);
です。これで指定されたポート番号で受信待ちになります。
一方 sendto 送信は、これも PHP のサンプルを参考に、
socket_sendto($socket, $msg, 送る文字列長, 0, サーバのIPアドレス, サーバのポート番号);
です。
しかし、このマニュアルは本当に良くできていますね。各関数にサンプルプログラムがあるので分かりやすいです。次回、プログラムを作成しますが、このサンプルプログラムを大いに活用したいと思います。
※コメント投稿者のブログIDはブログ作成者のみに通知されます