네트워크 프로그래밍에서 서버는 클라이언트의 연결 요청을 수락 할 수 있어야합니다. PHP는 Socket_accept ()가 서버 청취 및 수신 연결을 구현하는 데 중요한 기능 인 기본 네트워크 통신을 처리하기위한 일련의 소켓 기능을 제공합니다. 이 기사는 Socket_accept ()를 사용하여 클라이언트 연결을 수신하고 예제를 통해이를 사용하는 방법을 자세히 소개합니다.
Socket_accept () 는 소켓 청취 대기열로부터 연결을 수신하는 PHP의 함수입니다. 기본 구문은 다음과 같습니다.
socket_accept(Socket $socket): Socket|false
매개 변수 :
$ socket : 청취 소켓을 생성하고 socket_create () 및 socket_bind () 에 의해 구속되었습니다.
반품 값 :
클라이언트와의 커뮤니케이션을 위해 성공하면 새 소켓 인스턴스를 반환합니다.
실패시 False를 반환합니다.
socket_accept ()를 사용하기 전에 일반적으로 다음 단계를 완료해야합니다.
소켓 생성 : socketcreate ()
바인딩 주소 및 포트 : Socket_bind ()
듣기 시작 : socket_listen ()
연결 수신 : socket_accept ()
클라이언트와의 커뮤니케이션 : socket_read () 및 socket_write ()
연결 닫기 : socket_close ()
다음은 클라이언트 연결을 수신하기 위해 Socket_accept ()를 사용하는 방법을 보여주는 완전한 소켓 서버 예제입니다.
<?php
// 주소와 포트를 설정하십시오
$address = '0.0.0.0';
$port = 12345;
// 만들다 socket
$serverSocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($serverSocket === false) {
die("socket_create() 실패하다: " . socket_strerror(socket_last_error()) . "\n");
}
// 주소와 포트 바인드
if (!socket_bind($serverSocket, $address, $port)) {
die("socket_bind() 실패하다: " . socket_strerror(socket_last_error($serverSocket)) . "\n");
}
// 연결을 듣기 시작하십시오
if (!socket_listen($serverSocket)) {
die("socket_listen() 실패하다: " . socket_strerror(socket_last_error($serverSocket)) . "\n");
}
echo "서버가 시작되었습니다,청취 {$address}:{$port} ...\n";
// 클라이언트 연결을받습니다
$clientSocket = socket_accept($serverSocket);
if ($clientSocket === false) {
echo "socket_accept() 실패하다: " . socket_strerror(socket_last_error($serverSocket)) . "\n";
} else {
// 고객에게 환영 메시지를 보내십시오
$welcome = "Connect에 오신 것을 환영합니다 m66.net 섬기는 사람\n";
socket_write($clientSocket, $welcome, strlen($welcome));
// 클라이언트 데이터를 읽습니다
$input = socket_read($clientSocket, 1024);
echo "클라이언트 메시지를 받았습니다: " . trim($input) . "\n";
// 고객에게 응답하십시오
$response = "당신은 그것을 보냈습니다: " . $input;
socket_write($clientSocket, $response, strlen($response));
// 클라이언트 연결을 닫습니다
socket_close($clientSocket);
}
// 关闭섬기는 사람 socket
socket_close($serverSocket);
?>
권한 문제 : 낮은 포트 (예 : 80 또는 443)를들을 때 관리자 권한이 필요할 수 있습니다.
시간 초과 처리 : Socket_accept ()는 차단 함수입니다. 비 블로킹 모드가 필요한 경우 socket_set_nonblock ()을 사용할 수 있습니다.
보안 : 적절한 오류 처리 및 로깅 메커니즘을 생산 환경에 추가하여 악의적 인 연결을 방지해야합니다.
멀티 클라이언트 지원 :이 예제는 하나의 클라이언트 연결 만 처리합니다. 여러 클라이언트를 동시에 처리 해야하는 경우 PCNTL_FORK () 또는 멀티 스레드 확장을 결합 할 수 있습니다.
Socket_accept () 는 PHP 네트워크 통신에서 필수 링크로 서버가 청취 대기열에서 클라이언트 연결을 추출하고 후속 처리를 수행 할 수 있도록합니다. 이 기사의 설명 및 예를 통해 기본 소켓 서버 구성 프로세스를 마스터하고 Socket_accept ()를 사용하여 클라이언트 연결의 수신 및 상호 작용 기능을 실현할 수 있어야합니다.