[PHP] TCP Socket Server
#!/usr/bin/php -q
<?php
//-q 옵션은 http protocol 헤더를 제거 하는 옵션입니다.
set_time_limit(0);
define("_IP", "0.0.0.0"); // IP를 지정하면 해당 IP에서의 접속만 허용됨
define("_PORT", "5000");
$sSock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sSock, _IP, _PORT);
socket_listen($sSock);
pcntl_signal(SIGCHLD, SIG_IGN);
while($sock = socket_accept($sSock))
{
socket_getpeername($sock, $sockIp, $sockPort);
msg("Client Socket : ".$sockIp.":".$sockPort."\n");
$pid = pcntl_fork();
msg("Fork\n");
if($pid == -1)
{
msg("Fork failed\n"); // 자식 프로세스 생성 실패
exit;
}
if($pid == 0)
{
while(1)
{
$buf = socket_read($sock, 1024);
if (!$buf)
{
exit;
}
else
{
msg("Client(".$sockPort.") Data : [".$buf."]\n");
$cmd = substr($buf, 0, 4);
msg("Client(".$sockPort.") Cmd : [".$cmd."]\n");
switch($cmd)
{
case "time":
socket_write($sock, date("Y/m/d H:i:s"));
break;
default:
msg("Client(".$sockPort.") : No Cmd\n");
break;
}
}
}
}
}
function msg($msg)
{
echo "SERVER >> ".$msg;
}
?>