ファイナンス、情報通信技術のスキル・アグリゲーション・サイト
「ソケット・プログラミング」の PHP プログラムサンプルです。異なるプログラム言語間であっても、ソケット通信を試すことができます。
「ソケット・プログラミング」は、さまざまなオペレーティング・システム(OS)上で、さまざまなプログラミング言語がサポートしている TCP/IP ネットワーク上のアプリケーションやプロセスを作成することができます。ネットワーク上にあるマシン間のみならず、同一マシン内のプロセス間の通信にも利用されます。
<?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
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
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
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);
?>