현재 위치: > 최신 기사 목록> php socket_accept ()와 socket_create ()의 기본 조정

php socket_accept ()와 socket_create ()의 기본 조정

M66 2025-05-18

PHP 네트워크 프로그래밍에서 Socket_create ()Socket_accept () 는 특히 TCP 또는 UDP를 기반으로 서버 측 애플리케이션을 구축 할 때 두 가지 매우 중요한 기능입니다. 이 기사는이 두 기능의 기본 기능과 사용법을 자세히 소개하고 간단한 서버 측 프로그램을 구현하기 위해 함께 사용하는 방법을 보여줍니다.

1. socket_create ()의 기능 및 사용

Socket_create ()는 네트워크 프로그래밍의 시작점 인 네트워크 통신을위한 소켓 리소스를 만드는 데 사용됩니다. 기능 프로토 타입은 다음과 같습니다.

 resource socket_create ( int $domain , int $type , int $protocol )
  • $ domain : 일반적으로 사용되는 프로토콜 패밀리를 지정하고 AF_INET (IPv4), AF_INET6 (IPv6) 및 AF_UNIX (로컬 커뮤니케이션)입니다.

  • $ 유형 : 소켓 유형을 지정합니다. 일반적인 유형은 SOOD_STREAM (TCP 스트리밍 연결), SOCK_DGRAM (UDP 데이터 그램)입니다.

  • $ 프로토콜 : 특정 프로토콜을 지정합니다. 일반적으로 TCP는 SOL_TCP를 사용하고 UDP는 SOL_UDP를 사용합니다.

생성이 성공할 때 소켓 자원을 반환하고 실패하면 거짓을 반환합니다.

예:

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

2. socket_accept ()의 역할과 사용

Socket_accept ()는 서버에서 듣는 소켓의 클라이언트 연결을 수락하는 데 사용됩니다. 기능 프로토 타입은 다음과 같습니다.

 resource socket_accept ( resource $socket )
  • 매개 변수 $ 소켓은 Socket_create () 로 생성되어 청취 된 소켓입니다.

  • 통화 후 클라이언트 연결 요청이있는 경우 클라이언트와 통신하기 위해 새 소켓 리소스가 반환됩니다. 실패하면 거짓이 반환됩니다.

3. socket_create ()와 socket_accept () 간의 협력

서버가 클라이언트 요청을 듣고 연결을 수신 할 수 있도록 일반적인 프로세스는 다음과 같습니다.

  1. 소켓을 만듭니다
    socket_create ()를 사용하여 소켓을 만듭니다.

  2. 주소를 바인딩하고 포트 <br> socket_bind ()를 사용하여 소켓을 로컬 IP 및 포트에 바인딩하십시오.

  3. 소켓을 들어보세요
    socket_listen ()을 사용하여 포트에서 듣고 연결을 수락 할 준비를하십시오.

  4. 연결 수락 <br> socket_accept ()를 사용하여 클라이언트가 연결되기까지 기다렸다가 성공 후 새 소켓을 반환하십시오.

  5. 데이터를 읽고 쓰십시오 <br> 새 소켓을 통해 클라이언트와의 커뮤니케이션.

  6. 연결을 닫습니다 <br> 통신이 완료된 후 소켓을 닫습니다.

다음은이 두 기능을 사용하여 간단한 TCP 서버를 구현하는 방법을 보여주는 완전한 예입니다.

 <?php
// 만들다 TCP socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
    die("만들다 socket 실패하다: " . socket_strerror(socket_last_error()));
}

// 묶다 IP 그리고 포트
if (!socket_bind($server, "0.0.0.0", 8080)) {
    die("묶다 socket 실패하다: " . socket_strerror(socket_last_error($server)));
}

// 모니터링을 시작하십시오,가장 허용됩니다5연결을 위해 줄을 서십시오
if (!socket_listen($server, 5)) {
    die("监听실패하다: " . socket_strerror(socket_last_error($server)));
}

echo "서버가 시작되었습니다,연결을 기다리고 있습니다...\n";

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

    // 클라이언트 데이터를 읽습니다
    $input = socket_read($client, 1024);
    echo "클라이언트 데이터를 받았습니다: $input\n";

    // 고객에게 응답을 보내십시오
    $response = "Hello from m66.net server!";
    socket_write($client, $response, strlen($response));

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

socket_close($server);
?>

이 예에서 :

  • 서버는 모든 로컬 IP 주소의 포트 8080에 바인딩됩니다.

  • socket_accept ()를 사용하여 클라이언트 연결 요청을 받고 성공 후 새 소켓을 반환하십시오.

  • 클라이언트가 보낸 데이터를 읽고 간단한 응답을 반환하십시오.

  • 클라이언트와의 연결을 닫고 새로운 연결을 계속 기다리십시오.

4. 요약

  • socket_create ()는 기본 통신 채널을 만드는 데 사용됩니다.

  • Socket_accept () 는 서버에서 클라이언트와 상호 작용하는 클라이언트 연결 및 리턴 소켓을 수신하는 데 사용됩니다.

  • 이 둘의 조합은 TCP 서버 측 프로그래밍의 기초입니다.

  • 실제 응용 분야에서 오류, 동시 연결 및 데이터 전송 세부 사항도 필요합니다.

이 기사가 PHP에서 Socket_create ()Socket_accept ()를 더 잘 이해하고 적용하여 소켓 기반 네트워크 서비스를 쉽게 구축 할 수 있기를 바랍니다.