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

' . iseeit.jp 情報通信技術 . '

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);
?>

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

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

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

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

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

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

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

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

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

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