현재 위치: > 최신 기사 목록> 클라이언트 연결에서 Socket_set_Block 응용 프로그램의 예

클라이언트 연결에서 Socket_set_Block 응용 프로그램의 예

gitbox 2025-05-27

PHP에서 네트워크를 프로그래밍 할 때 소켓 작업이 기본적이고 중요한 컨텐츠입니다. socket_set_block 함수는 소켓을 작동 할 때 일반적으로 사용되는 기능입니다. 소켓의 차단 모드를 설정하는 데 사용됩니다. 이 기사는 클라이언트 연결 프로세스에서 Socket_set_Block 함수의 역할에 중점을두고 실제 예제 코드를 통해 사용법을 설명합니다.


1. Socket_set_Block 함수 소개

socket_set_block 함수는 지정된 소켓을 차단 모드로 설정하는 데 사용됩니다. 소위 차단 모드는 데이터를 일시적으로 사용할 수없는 경우 읽기 및 쓰기 작업이 수행 될 때를 나타냅니다. 데이터가 데이터를 사용할 수있게하거나 작업이 완료 될 때까지 기능이 대기합니다.

구문은 다음과 같습니다.

 bool socket_set_block ( resource $socket )
  • $ 소켓 : 설정 모드가 필요한 소켓 리소스.

  • 반환 값은 부울이고, True가 성공하면 설정이 true를 반환하고, 실패는 false가 false 를 반환합니다.

비교적, 소켓을 비 블로킹 모드로 설정하는 함수 socket_set_nonblock 도 있습니다. 읽기 및 쓰기 작업은 즉시 반환을 기다리지 않습니다.


2. 클라이언트 연결에서 차단 모드의 역할

클라이언트가 소켓을 통해 서버에 연결하면 일반적으로 연결이 성공적으로 설정 될 때까지 기다리거나 서버가 데이터를 반환 할 때까지 기다려야합니다. 차단 모드는 클라이언트의 소켓 호출을 자동으로 대기하여 결과가 일반 기능 호출처럼 반환되기를 기다립니다. 이는 프로그램에 직관적이고 직관적입니다.

예를 들어, socket_connect를 호출 할 때, 차단 모드에서는 기능이 연결이 성공적이거나 실패 할 때까지 현재 프로그램을 차단하여 오류 판단 및 후속 데이터 교환을 용이하게 할 수 있습니다.

일부 시나리오에서는 차단 모드가 사용되지 않으면 연결 프로세스가 복잡해지고 폴링 또는 이벤트 중심 메커니즘을 사용하여 연결 상태를 지속적으로 감지해야합니다.


3. 실제 사용 사례

다음은 Socket_set_Block 함수를 사용하여 소켓을 차단 모드로 설정하는 방법을 보여주는 간단한 PHP 클라이언트 예입니다. 서버에 연결하고 데이터를 보내십시오.

 <?php
// 만들다TCP소켓
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("만들다소켓失败: " . socket_strerror(socket_last_error()));
}

// 차단 모드로 설정합니다,후속 작업이 완료 될 것인지 확인하십시오
if (!socket_set_block($socket)) {
    die("차단 모드를 설정하지 못했습니다");
}

// 서버에 연결하십시오,서버 주소의 경우gitbox.net실제 도메인 이름 대신,포트는입니다80
$server = 'gitbox.net';
$port = 80;
if (!socket_connect($socket, $server, $port)) {
    die("서버에 연결하십시오失败: " . socket_strerror(socket_last_error($socket)));
}

// 구조HTTP요청 데이터
$request = "GET / HTTP/1.1\r\n";
$request .= "Host: $server\r\n";
$request .= "Connection: Close\r\n\r\n";

// 요청을 보내십시오
socket_write($socket, $request, strlen($request));

// 응답을 읽으십시오
$response = '';
while ($out = socket_read($socket, 2048)) {
    $response .= $out;
}

// 关闭소켓
socket_close($socket);

// 출력 응답 내용
echo $response;
?>