현재 위치: > 최신 기사 목록> 기본 네트워크 서버를 작성하려면 Socket_Listen ()과 함께

기본 네트워크 서버를 작성하려면 Socket_Listen ()과 함께

M66 2025-05-28

소켓 확장을 사용하여 PHP에서는 네트워크 통신 기능을 매우 유연하게 구현할 수 있으며이를 사용하여 기본 네트워크 서버를 생성 할 수도 있습니다. 이 기사는 Socket_Listen ()Socket_accept () 함수를 사용하여 간단한 TCP 서버를 구축하는 방법에 중점을 둡니다.

socket_listen () 및 socket_accept () 란 무엇입니까?

  • socket_listen ()
    이 기능은 클라이언트 연결 요청을 대기하기 위해 IP 및 포트 바운드가있는 소켓 리소스를 듣는 데 사용됩니다.

  • socket_accept ()
    이 기능은 들어오는 클라이언트 연결 요청을 수락하는 데 사용되며 클라이언트와 통신하기위한 새로운 소켓 리소스를 반환합니다.

기본 프로세스 분석

  1. 소켓 리소스 생성 ( socket_create )

  2. IP 및 포트 바인드 ( Socket_bind )

  3. 포트 듣기 ( socket_listen )

  4. 클라이언트 연결 루핑 및 수락 ( socket_accept )

  5. 데이터를 읽고 쓰고 완전한 의사 소통

  6. 클라이언트 및 서버 소켓을 닫습니다

샘플 코드

 <?php
// 만들다TCP socket(AF_INET프로토콜 패밀리,스트리밍)
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
    die("socket_create() 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}

// 묶다IP그리고 포트
$address = '0.0.0.0';  // 모든 네트워크 인터페이스를 듣습니다
$port = 8080;
if (!socket_bind($server, $address, $port)) {
    die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}

// 모니터링을 시작하십시오,연결을 기다리는 큐 길이는 다음과 같습니다5
if (!socket_listen($server, 5)) {
    die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n");
}

echo "서버가 시작되었습니다,감시 장치 {$address}:{$port}\n";

while (true) {
    // 클라이언트 연결 차단 및 대기
    $client = socket_accept($server);
    if ($client === false) {
        echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($server)) . "\n";
        continue;
    }

    // 클라이언트의 데이터를 읽습니다,최대 읽기1024바이트
    $input = socket_read($client, 1024);
    if ($input === false) {
        echo "socket_read() 실패하다: " . socket_strerror(socket_last_error($client)) . "\n";
        socket_close($client);
        continue;
    }

    echo "클라이언트 데이터를 받았습니다: $input\n";

    // 처리 데이터 - 다음은 클라이언트의 메시지에 대한 간단한 답변입니다.
    $response = "안녕하세요,고객!보내는 데이터는입니다:" . trim($input) . "\n";
    socket_write($client, $response, strlen($response));

    // 关闭고객连接
    socket_close($client);
}

// 서버를 종료하십시오socket(보통 나는 여기에 가지 않을 것입니다)
socket_close($server);
?>

설명

  • 실제로 사용하면 완전한 프로토콜 파서 구현 또는 여러 클라이언트를 비동기로 처리하는 등의 요구에 따라 읽기 및 쓰기 논리를 확장 할 수 있습니다.

  • 리스너의 IP는 특정 주소로 설정하거나 '0.0.0.0'을 사용하여 사용 가능한 모든 네트워크 인터페이스를 청취 할 수 있습니다.

  • 포트 번호는 시스템을 사용하여 포트를 유지하기 위해 피해야하며 일반적으로 1024 이상의 포트를 선택해야합니다.

  • 위의 코드는 초보자 이해에 적합한 단일 스레드 서버입니다.

요약

Socket_Listen ()Socket_Accept () 를 통해 PHP는 기본 네트워크 통신 기능을 실현하기 위해 TCP 서버 프로그램을 매우 직접 구축 할 수 있습니다. PHP는 고성능 서버를 위해 특별히 설계된 언어는 아니지만 소규모 서비스를 신속하게 프로토 타입하거나 간단한 네트워크 상호 작용 애플리케이션을 만드는 데 여전히 실용적입니다.