ファイナンス、情報通信技術、法律のスキル・アグリゲーション・サイト

PHP ソケット・プログラムサンプル

ソケット・プログラミング」の PHP プログラムサンプルです。異なるプログラム言語間であっても、ソケット通信を試すことができます。

ソケット・プログラミング」は、さまざまなオペレーティング・システム(OS)上で、さまざまなプログラミング言語がサポートしている TCP/IP ネットワーク上のアプリケーションやプロセスを作成することができます。ネットワーク上にあるマシン間のみならず、同一マシン内のプロセス間の通信にも利用されます。

ストリーム・ソケットのサーバプログラム例(PHP 版)



<?php
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();

$address = "127.0.0.1";
$port = 8888;

if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false){
 $errmsg="socket_create() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 exit($errmsg);
}

if(socket_bind($sock, $address, $port) === false){
 $errmsg="socket_bind() failed:".socket_strerror(socket_last_error($sock)).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

if(socket_listen($sock, 5) === false){
 $errmsg="socket_listen() failed:".socket_strerror(socket_last_error($sock)).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

do{
 if(($consock = socket_accept($sock)) === false){
  echo "socket_accept() failed:".socket_strerror(socket_last_error($sock)).PHP_EOL;
  break;
 }
 if(socket_getpeername($consock, $conaddr, $conport) === false){
  echo "socket_getpeername() failed" . PHP_EOL;
 }
 do{
  if(($buf = socket_read($consock, 1024)) === false){
   echo "socket_read() failed:".socket_strerror(socket_last_error($consock)).PHP_EOL;
   break;
  }
  if($buf == ""){
   break;
  }
  echo "Received ".strlen($buf)." bytes from ".$conaddr." ".$conport.PHP_EOL;
  if(($len = socket_write($consock, $buf, strlen($buf))) === false){
   echo "socket_write() failed:".socket_strerror(socket_last_error($consock)).PHP_EOL;
   break;
  }
 }while(true);
 socket_close($consock);
}while(true);

socket_close($sock);
?>

ストリーム・ソケットのクライアントプログラム例(PHP 版)



<?php
error_reporting(E_ALL);

$host = "localhost";
$port = 8888;
$msg = "send message to server";

$address = gethostbyname($host);

if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false){
 $errmsg="socket_create() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 exit($errmsg);
}

if(socket_connect($sock, $address, $port) === false){
 $errmsg="socket_connect() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

if(($len = socket_write($sock, $msg, strlen($msg))) === false){
 $errmsg="socket_write() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

if(($buf = socket_read($sock, 1024)) === false){
 $errmsg="socket_read() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

echo "Received ".strlen($buf)." bytes:".$buf.PHP_EOL;

socket_close($sock);
?>

データグラム・ソケットのサーバプログラム例(PHP 版)



<?php
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();

$address = "127.0.0.1";
$port = 8888;

if(($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) === false){
 $errmsg="socket_create() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 exit($errmsg);
}

if(socket_bind($sock, $address, $port) === false){
 $errmsg="socket_bind() failed:".socket_strerror(socket_last_error($sock)).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

do{
 if(($len = socket_recvfrom($sock, $buf, 1024, MSG_WAITALL, $fromaddr, $fromport)) === false){
  echo "socket_recvfrom() failed:".socket_strerror(socket_last_error($sock)).PHP_EOL;
  break;
 }

 echo "Received ".strlen($buf)." bytes from ".$fromaddr." ".$fromport.PHP_EOL;

 if(($len = socket_sendto($sock, $buf,$len, MSG_EOF, $fromaddr, $fromport)) === false){
  echo "socket_sendto() failed:".socket_strerror(socket_last_error($sock)).PHP_EOL;
  break;
 }
}while(true);

socket_close($sock);
?>

データグラム・ソケットのクライアントプログラム例(PHP 版)



<?php
error_reporting(E_ALL);

$host = "localhost";
$port = 8888;
$msg = "send message to server";

$address = gethostbyname($host);

if(($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) === false){
 $errmsg="socket_create() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 exit($errmsg);
}

if(($len = socket_sendto($sock, $msg, strlen($msg), MSG_EOF, $address, $port)) === false){
 $errmsg="socket_sendto() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

if(($len = socket_recvfrom($sock, $buf, 1024, MSG_WAITALL, $fromaddr, $fromport)) === false){
 $errmsg="socket_recvfrom() failed:".socket_strerror(socket_last_error()).PHP_EOL;
 socket_close($sock);
 exit($errmsg);
}

echo "Received ".strlen($buf)." bytes:".$buf.PHP_EOL;

socket_close($sock);
?>

『PHP ソケット・プログラムサンプル』を公開しました。

『人間がつながったことが、インターネットのいちばん大きな意義だ。 … あきらめなくなくてもすむ社会にしたい。 … その足場の台が、インターネットの役割だ。』(序章より)

角川インターネット講座1 インターネットの基礎 情報革命を支えるインフラストラクチャー (角川学芸出版全集) amazon.co.jp Kindle本

ファイナンシャル・プランニング
6つの係数

終価係数 : 元本を一定期間一定利率で複利運用したとき、将来いくら になるかを計算するときに利用します。

現価係数 : 将来の一定期間後に目標のお金を得るために、現在いくら の元本で複利運用を開始すればよいかを計算するときに利用します。

年金終価係数 : 一定期間一定利率で毎年一定金額を複利運用で 積み立て たとき、将来いくら になるかを計算するときに利用します。

年金現価係数 : 元本を一定利率で複利運用しながら、毎年一定金額を一定期間 取り崩し ていくとき、現在いくら の元本で複利運用を開始すればよいかを計算するときに利用します。

減債基金係数 : 将来の一定期間後に目標のお金を得るために、一定利率で一定金額を複利運用で 積み立て るとき、毎年いくら ずつ積み立てればよいかを計算するときに利用します。

資本回収係数 : 元本を一定利率で複利運用しながら、毎年一定金額を一定期間 取り崩し ていくとき、毎年いくら ずつ受け取りができるかを計算するときに利用します。

積み立て&取り崩しモデルプラン

積立金額→年金額の計算 : 年金終価係数、終価係数、資本回収係数を利用して、複利運用で積み立てた資金から、将来取り崩すことのできる年金額を計算します。

年金額→積立金額の計算 : 年金現価係数、現価係数、減債基金係数を利用して、複利運用で将来の年金プランに必要な資金の積立金額を計算します。

『インターネットの文化として、実際に動くものを重視するというプラグマティズム(実用主義)の徹底がある。 … インターネットはソフトウェアで動いており、その多くの部分がオープンソースだから …』(序章より)

角川インターネット講座2 ネットを支えるオープンソース ソフトウェアの進化 (角川学芸出版全集) amazon.co.jp Kindle本