현재 위치: > 최신 기사 목록> socket_accept () + socket_read () : 클라이언트 메시지 읽기를 구현합니다

socket_accept () + socket_read () : 클라이언트 메시지 읽기를 구현합니다

M66 2025-05-20

네트워크 프로그래밍에 PHP를 사용할 때 소켓은 서버 클라이언트 통신을 구현하는 데 중요한 메커니즘입니다. socket_accept ()socket_read () 는 클라이언트 연결 및 읽기 메시지를 처리하는 주요 기능입니다. 이 기사는이 두 가지 기능을 사용하여 간단한 TCP 서버 프로그램을 구축하여 클라이언트 메시지 수신 기능을 실현하는 방법을 자세히 설명합니다.

1. 준비

먼저 PHP에 소켓 확장이 설치되어 있는지 확인하십시오. 명령 줄에서 다음 명령을 사용하여 지원되는지 확인하십시오.

 php -m | grep sockets

활성화되지 않으면 php.ini 에서 encomment extension = 소켓을 사용하여 서버를 다시 시작할 수 있습니다.

2. TCP 소켓 서버를 만듭니다

아래는 Socket_Accept ()Socket_read ()를 사용하여 클라이언트가 보낸 메시지를 수신하는 방법을 보여주는 완전한 샘플 코드입니다.

 <?php

// 설정 IP 그리고 포트
$host = '0.0.0.0';
$port = 8080;

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

// 지정된 것에 결합합니다 IP 그리고 포트
if (!socket_bind($socket, $host, $port)) {
    die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 연결을 듣기 시작하십시오
if (!socket_listen($socket, 5)) {
    die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}

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

// 무한 루프 처리 클라이언트 연결
while (true) {
    // 클라이언트 연결을 수락합니다
    $client = socket_accept($socket);
    if ($client === false) {
        echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    // 클라이언트의 메시지를 읽습니다
    $input = socket_read($client, 1024);
    if ($input === false) {
        echo "socket_read() 실패하다: " . socket_strerror(socket_last_error($client)) . "\n";
    } else {
        echo "클라이언트 메시지를 받았습니다: " . trim($input) . "\n";

        // 고객에게 답장하십시오
        $response = "서버는 메시지를 받았습니다: " . $input . "\n";
        socket_write($client, $response, strlen($response));
    }

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

// 메인을 닫으십시오 Socket
socket_close($socket);

3. 클라이언트 예제 (선택 사항)

Telnet을 사용하여 서버를 테스트하거나 간단한 PHP 클라이언트를 다음과 같이 작성할 수 있습니다.

 <?php

$host = 'm66.net';
$port = 8080;

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

if (!socket_connect($socket, $host, $port)) {
    die("连接실패하다: " . socket_strerror(socket_last_error($socket)) . "\n");
}

$message = "안녕하세요,서버 측!";
socket_write($socket, $message, strlen($message));

$response = socket_read($socket, 1024);
echo "收到서버 측回应: $response\n";

socket_close($socket);

IV. 설명

  • socket_accept () : 클라이언트의 연결 요청을 수락하는 데 사용됩니다. 클라이언트 연결이 없으면 대기가 차단됩니다.

  • socket_read () : 클라이언트의 데이터를 읽는 데 사용됩니다. 읽을 최대 바이트 수, 일반적으로 1024 이상을 지정할 수 있습니다.

  • socket_write () : 클라이언트에게 데이터를 보내는 데 사용됩니다.

5. 요약

기본 TCP 통신 메커니즘은 socket_accept ()socket_read ()를 사용하여 구현할 수 있습니다. PHP는 기본 네트워크 프로그래밍에 가장 일반적으로 사용되는 언어는 아니지만 소켓 확장을 통해 여전히 강력한 네트워크 통신 기능이 있습니다. 경량 서비스, 메시지 청취자 또는 게이트웨이 구성 요소 구축과 같은 특정 시나리오에서 PHP 소켓은 간단하고 실용적인 선택입니다.

이 기사의 예제를 사용하면 서버 소켓을 만들고, 클라이언트 연결을 수락하고, 클라이언트 메시지를 읽고, 응답하는 방법을 배웠습니다. 적절한 오류 처리와 동시 설계를 결합하여보다 복잡한 통신 시스템을 추가로 구축 할 수 있습니다.