현재 위치: > 최신 기사 목록> Socket_accept ()를 사용하여 기본 PHP TCP 서버를 만듭니다

Socket_accept ()를 사용하여 기본 PHP TCP 서버를 만듭니다

M66 2025-05-23

네트워크 프로그래밍에서 PHP는 웹 애플리케이션을 개발하는 데 사용될뿐만 아니라 TCP 서버와 같은 저수준 네트워크 커뮤니케이션 프로그램을 만드는 데 사용될 수 있습니다. Socket_accept () 는 클라이언트 연결을 수락하기위한 PHP의 중요한 기능 중 하나입니다. 이 기사를 사용하면 간단한 TCP 서버를 단계별로 구축하고 핵심 사항을 설명합니다.

1. socket_accept () 란 무엇입니까?

Socket_accept () 는 PHP 소켓 확장의 함수이며 서버에서 확립 된 소켓에서 연결 요청을 수신 할 수 있습니다. 클라이언트가 연결을 요청하면 Socket_accept ()는 기본 청취 소켓이 아닌 클라이언트와 통신하는 데 사용되는 새 소켓 인스턴스를 반환합니다.

2. TCP 서버를 만드는 단계

1 단계 : 소켓을 만듭니다

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

이 코드 라인은 IPv4 ( AF_INET )의 TCP 소켓 ( SOCK_STREAM )을 생성하고 프로토콜 유형은 TCP ( SOL_TCP )입니다.

2 단계 : 주소와 포트를 바인딩하십시오

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

이 단계는 소켓을 12345 와 같은 로컬 IP 및 포트에 바인딩합니다.

3 단계 : 연결을 듣습니다

 if (!socket_listen($socket, 5)) {
    die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}

들어오는 연결을 듣기 시작하십시오. 5는 허용 된 대기 연결 큐 길이를 최대 값을 나타냅니다.

4 단계 : 연결을 수락하고 요청을 처리하십시오

 while (true) {
    echo "클라이언트 연결을 기다리고 있습니다...\n";
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    $welcomeMsg = "오신 것을 환영합니다 m66.net ~의 PHP TCP 섬기는 사람!\n";
    socket_write($clientSocket, $welcomeMsg, strlen($welcomeMsg));

    // 클라이언트 정보를 읽으십시오
    $input = socket_read($clientSocket, 1024);
    echo "클라이언트 메시지를 받았습니다: " . $input;

    // 고객에게 응답하십시오
    $response = "당신은 그것을 보냈습니다: " . trim($input) . "\n";
    socket_write($clientSocket, $response, strlen($response));

    // 클라이언트 연결을 닫습니다
    socket_close($clientSocket);
}

위의 코드에서 서버는 클라이언트가 연결할 수 있도록 무한히 루프됩니다. 연결이 설정되면 환영 메시지가 전송되고 클라이언트 입력이 읽히고 AS-IS로 반환됩니다.

5 단계 : 메인 소켓을 닫습니다

위의 코드는 무한 루프 서버이지만 실제로 사용하면 인터럽트 메커니즘 또는 신호 처리를 추가해야합니다. 서버를 종료하는 코드는 다음과 같습니다.

 socket_close($socket);

3. 클라이언트 연결 테스트

Telnet을 사용 하여이 TCP 서버를 테스트 할 수 있습니다.

 telnet m66.net 12345

연결이 성공하면 서버에서 환영 메시지가 반환됩니다.

4. 주목할만한 것들

  • PHP의 소켓 확장은 기본적으로 활성화되지 않으며 Php.ini 에서 소켓이 활성화되어 있는지 확인합니다.

  • 명령 줄을 사용하여 스크립트를 실행하십시오. 웹 환경은 이러한 긴 연결된 서비스를 실행하는 데 적합하지 않습니다.

  • 실제 배포 중에 예외 처리, 로깅 및 다중 프로세스 처리와 같은 기능을 추가해야합니다.

결론

이 기사를 통해 php socket_accept () 함수를 사용하여 간단한 TCP 서버를 만드는 방법을 배웠습니다. PHP는 웹 서비스에 선호되는 언어는 아니지만 기본적인 요구를 충족시키는 데 필요한 도구도 제공합니다. 이 작은 서버 예제는 PHP의 강력한 유연성을 보여줍니다.