라이브러리
[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` 함수를 사용하세요.
-
- 나우호스팅 @pcs8404
-
호스팅포럼 화이팅!
댓글목록
등록된 댓글이 없습니다.