라이브러리

[PHP] stream_socket_accept - stream_socket_server에 의해 생성된 소켓에서 연결 수락




PHP Stream Socket Accept

PHP의 `stream_socket_accept` 함수는 TCP 소켓을 사용하여 클라이언트의 연결을 수락하는 함수입니다. 이 함수는 서버 소켓을 열고, 클라이언트가 연결을 요청하면 연결을 수락하고, 클라이언트와의 통신을 위한 소켓을 반환합니다.

사용법


`stream_socket_accept` 함수는 다음 형식으로 사용됩니다.

#hostingforum.kr
php

stream_socket_accept($server_socket [, $timeout [, $flags]])



- `$server_socket`: 서버 소켓을 열어야 하는 소켓입니다.
- `$timeout`: 연결을 기다리는 시간입니다. (선택 사항)
- `$flags`: 추가 옵션입니다. (선택 사항)

예제


# 예제 1: 단순한 TCP 서버


#hostingforum.kr
php

// 서버 소켓 열기

$server_socket = stream_socket_server("tcp://0.0.0.0:8080", $errno, $errstr, STREAM_SERVER_BIND);



if (!$server_socket) {

    echo "Error: $errstr ($errno)
";

    exit;

}



echo "서버가 시작되었습니다.
";



// 클라이언트 연결을 기다립니다.

$client_socket = stream_socket_accept($server_socket);



if (!$client_socket) {

    echo "Error: 클라이언트 연결을 수락할 수 없습니다.
";

    exit;

}



echo "클라이언트가 연결되었습니다.
";



// 클라이언트와의 통신을 위해 데이터를 읽고 쓰세요.

$data = fread($client_socket, 1024);

echo "클라이언트로부터의 데이터: $data
";



fwrite($client_socket, "서버에서 클라이언트로의 데이터입니다.
");



// 클라이언트와의 통신을 종료합니다.

fclose($client_socket);

fclose($server_socket);



# 예제 2: 멀티 스레딩을 사용한 TCP 서버


#hostingforum.kr
php

// 서버 소켓 열기

$server_socket = stream_socket_server("tcp://0.0.0.0:8080", $errno, $errstr, STREAM_SERVER_BIND);



if (!$server_socket) {

    echo "Error: $errstr ($errno)
";

    exit;

}



echo "서버가 시작되었습니다.
";



// 클라이언트 연결을 기다립니다.

while (true) {

    $client_socket = stream_socket_accept($server_socket);



    if (!$client_socket) {

        echo "Error: 클라이언트 연결을 수락할 수 없습니다.
";

        exit;

    }



    echo "클라이언트가 연결되었습니다.
";



    // 클라이언트와의 통신을 위해 데이터를 읽고 쓰세요.

    $data = fread($client_socket, 1024);

    echo "클라이언트로부터의 데이터: $data
";



    fwrite($client_socket, "서버에서 클라이언트로의 데이터입니다.
");



    // 클라이언트와의 통신을 종료합니다.

    fclose($client_socket);

}



// 서버 소켓을 닫습니다.

fclose($server_socket);



참고


- `stream_socket_server` 함수를 사용하여 서버 소켓을 열어야 합니다.
- `stream_socket_accept` 함수를 사용하여 클라이언트 연결을 수락하고, 클라이언트와의 통신을 위한 소켓을 반환합니다.
- 클라이언트와의 통신을 위해 `fread` 함수를 사용하여 데이터를 읽고, `fwrite` 함수를 사용하여 데이터를 쓰세요.
- 클라이언트와의 통신을 종료하려면 `fclose` 함수를 사용하세요.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 116 페이지

검색

게시물 검색