PHP에서는 소켓 확장을 통해 네트워크 서비스 프로그램을 만들 수 있습니다. 그 중에서도 Socket_accept () 함수는 TCP 기반 서버 응용 프로그램을 구축 할 때 주요 기능 중 하나입니다. 이 기사는 전체 예제를 사용하여 Socket_accept ()를 사용하여 간단한 Echo 서버 (Echo Server)를 구현하는 방법을 설명합니다.
socket_accept ()는 클라이언트의 연결 요청을 수락하는 데 사용됩니다. 이 기능은 연결이 들어올 때까지 서버 소켓의 차단됩니다. 성공하면 클라이언트와 통신하는 데 사용할 수있는 새로운 소켓 리소스를 반환합니다.
문법:
resource socket_accept ( resource $socket )
$ Socket은 Socket_create () 및 Socket_bind ()를 통해 생성되고 청취 된 서버 소켓입니다.
클라이언트와 통신하는 소켓 리소스를 반환합니다.
간단한 Echo 서버를 만드는 전체 단계는 다음과 같습니다.
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("socket_create() 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}
$host = '0.0.0.0';
$port = 12345;
if (!socket_bind($server, $host, $port)) {
die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}
if (!socket_listen($server, 5)) {
die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "서버가 시작되었습니다,포트를 들어보세요 $port ...\n";
while (true) {
$client = socket_accept($server);
if ($client === false) {
echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
$msg = "에코 서버에 연결하는 데 오신 것을 환영합니다!내용을 입력하십시오,서버는있는 그대로 반환됩니다。\n";
socket_write($client, $msg, strlen($msg));
while (true) {
$input = socket_read($client, 2048, PHP_NORMAL_READ);
if ($input === false || trim($input) === 'exit') {
break;
}
$input = trim($input);
$output = "당신은 입력했습니다: $input\n";
socket_write($client, $output, strlen($output));
}
socket_close($client);
echo "클라이언트 연결이 닫혔습니다。\n";
}
서버를 중지 해야하는 경우 기본 소켓을 닫을 수 있습니다.
socket_close($server);
Telnet 또는 TCP 연결을 지원하는 모든 클라이언트 도구를 사용하여 서버에 연결할 수 있습니다.
telnet m66.net 12345
연결이 성공하면 서버는 환영 메시지에 응답하고 입력 한 내용을 그대로 반환합니다.
PHP의 소켓 확장은 기본적으로 활성화되지 않으며 php.ini 에서 활성화해야합니다.
이 예제는 차단 모드이며 데모 및 교육 목적에 적합합니다. 실제 생산 환경에서는 비 블로킹 모드를 사용하거나 Stream_Select () 와 같은 방법을 사용하여 다중 클라이언트 지원을 달성하는 것이 좋습니다.
방화벽과 운영 체제가 청취 포트가 통신 할 수 있도록하십시오.
Socket_accept () 를 통해 PHP는 기본 TCP 네트워크 응용 프로그램을 구축 할 수 있습니다. 이 기사에서 구현 된 Echo 서버는 소켓 프로그래밍 메커니즘을 이해하기위한 좋은 출발점입니다. 이를 기준으로 더 확장하여 대화방, 리모컨 등과 같은보다 복잡한 네트워크 서비스를 구현할 수 있습니다.
Echo Server 예제는 소켓 프로그래밍에서 가장 기본적인 모델 중 하나이지만 네트워크 프로그래밍의 문을 열어줍니다. 이러한 기초를 마스터함으로써 PHP의 네트워크 커뮤니케이션 잠재력은 무한히 확대 될 것입니다.