PHP監聽Socket
<?phpset_time_limit(10);
$commonProtocol = getprotobyname('tcp');$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);if ($socket) {$result = socket_bind($socket, 'localhost', 1337);if ($result) { $result = socket_listen($socket, 5); if ($result) { echo '監聽成功'; }}}else{echo '監聽失敗';}
do {if (($msgsock = socket_accept($socket))) { /* 發送提示信息給連接上來的用戶 */ $msg = '==========================================rn' . 'Welcome to the PHP Test Server. rnrn' . 'To quit, type 'quit'. rn' . 'To shut down the server type 'shutdown'.rn' . 'To get help message type 'help'.rn' . '==========================================rn' . 'php>';}
socket_write($msgsock, $msg, strlen($msg));
do { $buf = socket_read($msgsock, 2048, PHP_BINARY_READ);
if (false === $buf) { echo 'socket_read() failed: reason: ' . socket_strerror($result) . 'n'; break 2; } if (!$buf = trim($buf)) { continue; } /* 客戶端輸入quit命令時候關閉客戶端連接 */ if ($buf == 'q') { break; } /* 客戶端輸入shutdown命令時候服務端和客戶端都關閉 */ if ($buf == 'shutdown') { socket_close($msgsock); break 2; } /* 客戶端輸入help命令時候輸出幫助信息 */ if ($buf == 'h') { $msg = ' PHP Server Help Message rnrn' . ' To quit, type 'quit'. rn' . ' To shut down the server type 'shutdown'.rn' . ' To get help message type 'help'.rn' . 'php> '; socket_write($msgsock, $msg, strlen($msg)); continue; } /* 客戶端輸入命令不存在時提示信息 */ $talkback = 'PHP: unknow command '$buf'.rnphp> '; socket_write($msgsock, $talkback, strlen($talkback)); echo '$bufn';} while (true);socket_close($msgsock);}while (true);/* 關閉Socket連接 */socket_close($socket);?>