현재 위치: > 최신 기사 목록> php의 socket_accept () 함수를 사용하여 간단한 Echo 서버 (Echo Server)를 구현하는 방법?

php의 socket_accept () 함수를 사용하여 간단한 Echo 서버 (Echo Server)를 구현하는 방법?

M66 2025-06-26

PHP에서는 소켓 확장을 통해 네트워크 서비스 프로그램을 만들 수 있습니다. 그 중에서도 Socket_accept () 함수는 TCP 기반 서버 응용 프로그램을 구축 할 때 주요 기능 중 하나입니다. 이 기사는 전체 예제를 사용하여 Socket_accept ()를 사용하여 간단한 Echo 서버 (Echo Server)를 구현하는 방법을 설명합니다.

1. socket_accept () 함수 소개

socket_accept ()는 클라이언트의 연결 요청을 수락하는 데 사용됩니다. 이 기능은 연결이 들어올 때까지 서버 소켓의 차단됩니다. 성공하면 클라이언트와 통신하는 데 사용할 수있는 새로운 소켓 리소스를 반환합니다.

문법:

 resource socket_accept ( resource $socket )
  • $ Socket은 Socket_create ()Socket_bind ()를 통해 생성되고 청취 된 서버 소켓입니다.

  • 클라이언트와 통신하는 소켓 리소스를 반환합니다.

2. 에코 서버를 구축하기위한 기본 단계

간단한 Echo 서버를 만드는 전체 단계는 다음과 같습니다.

1. 서버 소켓을 만듭니다

 $server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
    die("socket_create() 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}

2. IP 주소와 포트 바인드

 $host = '0.0.0.0';
$port = 12345;
if (!socket_bind($server, $host, $port)) {
    die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}

3. 연결을 듣습니다

 if (!socket_listen($server, 5)) {
    die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "서버가 시작되었습니다,포트를 들어보세요 $port ...\n";

4. 연결 및 프로세스 데이터를 수락합니다

 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";
}

5. 서버를 끄십시오

서버를 중지 해야하는 경우 기본 소켓을 닫을 수 있습니다.

 socket_close($server);

3. 테스트 방법

Telnet 또는 TCP 연결을 지원하는 모든 클라이언트 도구를 사용하여 서버에 연결할 수 있습니다.

 telnet m66.net 12345

연결이 성공하면 서버는 환영 메시지에 응답하고 입력 한 내용을 그대로 반환합니다.

4. 주목할만한 것들

  • PHP의 소켓 확장은 기본적으로 활성화되지 않으며 php.ini 에서 활성화해야합니다.

  • 이 예제는 차단 모드이며 데모 및 교육 목적에 적합합니다. 실제 생산 환경에서는 비 블로킹 모드를 사용하거나 Stream_Select () 와 같은 방법을 사용하여 다중 클라이언트 지원을 달성하는 것이 좋습니다.

  • 방화벽과 운영 체제가 청취 포트가 통신 할 수 있도록하십시오.

5. 요약

Socket_accept () 를 통해 PHP는 기본 TCP 네트워크 응용 프로그램을 구축 할 수 있습니다. 이 기사에서 구현 된 Echo 서버는 소켓 프로그래밍 메커니즘을 이해하기위한 좋은 출발점입니다. 이를 기준으로 더 확장하여 대화방, 리모컨 등과 같은보다 복잡한 네트워크 서비스를 구현할 수 있습니다.

Echo Server 예제는 소켓 프로그래밍에서 가장 기본적인 모델 중 하나이지만 네트워크 프로그래밍의 문을 열어줍니다. 이러한 기초를 마스터함으로써 PHP의 네트워크 커뮤니케이션 잠재력은 무한히 확대 될 것입니다.