현재 위치: > 최신 기사 목록> 데이터 무결성을 효과적으로 보장하기 위해 socket_set_block 함수를 사용하는 방법은 무엇입니까?

데이터 무결성을 효과적으로 보장하기 위해 socket_set_block 함수를 사용하는 방법은 무엇입니까?

gitbox 2025-05-26

socket_set_block 이란 무엇입니까?

Socket_set_block 은 PHP 소켓 확장에서 소켓을 차단 모드로 설정하는 기능입니다. 소위 차단 모드는 읽기 및 쓰기 작업을 수행 할 때 데이터를 준비하지 않으면 데이터가 계속 실행되기 전에 데이터가 준비 될 때까지 대기합니다. 비교적 비 차단 모드는 데이터 준비 여부에 관계없이 즉시 반환됩니다.

차단 모드는 데이터를 읽을 때 누락되지 않도록하여 데이터 무결성을 달성하는 데 도움이됩니다.

 bool socket_set_block ( resource $socket )

이 기능의 매개 변수는 소켓 리소스입니다. 통화는 성공 후에도 사실을 반환하고 실패 후 거짓을 반환합니다.


차단 모드를 사용하여 데이터 무결성을 보장하는 아이디어

데이터를 읽을 때 소켓이 차단되면 Socket_read는 데이터를 읽거나 연결이 닫힐 때까지 기다립니다. 루프 읽기와 길이 판단을 결합함으로써 모든 데이터가 손상되지 않도록 할 수 있습니다.

일반적인 아이디어는 다음과 같습니다.

  1. 소켓을 차단 모드로 설정하십시오.

  2. 예상되는 바이트 수가 읽거나 연결이 끊어 질 때까지 데이터는 루프를 지속적으로 읽습니다.

  3. 데이터가 완료되도록 모든 읽기 데이터를 연결하십시오.


샘플 코드 데모

다음은 Socket_set_Block을 사용하여 데이터 무결성을 보장하는 방법을 보여주는 간단한 클라이언트 측 읽기 데이터 예입니다.

 <?php
$host = "gitbox.net";
$port = 8080;

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

// 서버에 연결하십시오
if (!socket_connect($socket, $host, $port)) {
    die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}

// 차단 모드를 설정하십시오,확실하게 하다 socket_read 데이터 대기 차단
socket_set_block($socket);

$totalData = '';
$expectedLength = 1024; // 우리가 읽을 것으로 예상한다고 가정 해 봅시다 1024 바이트 데이터
$bytesRead = 0;

while ($bytesRead < $expectedLength) {
    $buffer = socket_read($socket, $expectedLength - $bytesRead);
    if ($buffer === false) {
        die("socket_read failed: " . socket_strerror(socket_last_error($socket)));
    }
    if ($buffer === '') {
        // 연결이 닫힙니다
        break;
    }
    $totalData .= $buffer;
    $bytesRead += strlen($buffer);
}

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

// 전체 데이터를 출력합니다
echo "완전한 데이터를 받았습니다:\n";
echo $totalData;
?>

코드 구문 분석

  • 먼저 socket_create를 사용하여 TCP 소켓을 만듭니다.

  • 서버에 연결하면 주소의 도메인 이름이 gitbox.net 으로 대체됩니다.

  • socket_set_block을 사용하여 소켓을 차단 모드로 설정하십시오.

  • 예상 바이트 수가 읽거나 연결이 닫힐 때까지 데이터를 읽으려면 루프를 입력하십시오.

  • 읽기 데이터는 데이터가 손실되지 않도록 $ totaldata 로 스 플라이 싱됩니다.

  • 마지막으로 전체 데이터가 출력됩니다.


주목해야 할 것

  • 차단 모드로 인해 프로그램이 일시 중지되고 읽는 동안 대기합니다. 네트워크가 불안정하면 프로그램이 천천히 응답 할 수 있습니다. 실제 응용 프로그램에서 적절한 시간을 설정하는 것이 좋습니다.

  • 데이터를 읽을 때 데이터 경계는 프로토콜 설계에 따라 판단되어야합니다. 이 예에서 고정 길이 판독 값이 가정됩니다.

  • 보다 복잡한 프로토콜의 경우 데이터 패킷 헤더와 함께 길이를 정의하고 먼저 패킷 헤더를 읽은 다음 해당 길이의 내용을 읽을 수 있습니다.