현재 위치: > 최신 기사 목록> 데이터 포장 및 전송을 달성하기 위해 pack () 함수 및 socket_sendto ()를 사용하는 방법은 무엇입니까?

데이터 포장 및 전송을 달성하기 위해 pack () 함수 및 socket_sendto ()를 사용하는 방법은 무엇입니까?

M66 2025-06-23

네트워크 프로그래밍에서 데이터 전송은 프로토콜 형식을 엄격하게 따라 보내야합니다. PHP의 Pack () 함수는 지정된 형식의 이진 문자열로 데이터를 패키지하는 데 도움이 될 수 있으며 Socket_Sendto () 는 UDP 프로토콜을 통해 지정된 주소로 데이터를 보내는 데 사용됩니다. 이 기사에서는이 두 기능을 조합하여 데이터의 포장 및 전송을 실현하는 방법을 설명합니다.

1. pack () 함수 소개

Pack () 함수는 지정된 형식 코드를 기반으로 PHP 변수를 이진 문자열로 변환합니다. 예를 들어:

 $data = pack("Nn", 12345, 80);

여기서 "NN"은 다음 을 의미합니다.

  • N : 서명되지 않은 긴 정수 (32 비트, 네트워크 엔지니어, 즉 큰 엔지니어)

  • N : 서명되지 않은 짧은 정수 (16 비트, 네트워크 엔디언)

패키지 1234580 을 네트워크를 쉽게 전송할 수 있도록 이진 문자열로 정수.

2. socket_sendto () 함수 소개

socket_sendto () 는 주로 UDP에 데이터를 보내는 데 사용되며 함수 서명은 다음과 같습니다.

 int socket_sendto(resource $socket, string $buf, int $len, int $flags, string $addr, int $port)
  • $ socket : socket_create () 를 통해 생성 된 소켓 리소스

  • $ BUF : 전송 될 데이터

  • $ len : 전송 된 데이터의 길이

  • $ 플래그 : 플래그, 일반적으로 0으로 설정됩니다

  • $ addr : 대상 IP 주소

  • $ 포트 : 대상 포트

3. 샘플 코드 : pack ()socket_sendto () 와 함께 데이터를 보냅니다.

"메시지 ID"및 "상태 코드"가 포함 된 패킷을 보내야한다고 가정하면 메시지 ID는 4 바이트 정수로 사용되며 상태 코드는 2 바이트 정수로 사용됩니다.

 <?php
// 만들다 UDP Socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()));
}

// 데이터 준비:정보ID상태 코드
$messageId = 1001;  // 4 바이트 정수
$statusCode = 200;  // 2 바이트 정수

// 사용 pack() 기능 포장 데이터,네트워크 바이트 순서(빅 엔디언)
$data = pack("Nn", $messageId, $statusCode);

// 목적지 주소 및 포트
$ip = "m66.net";
$port = 12345;

// 데이터를 보냅니다
$sent = socket_sendto($socket, $data, strlen($data), 0, $ip, $port);
if ($sent === false) {
    echo "socket_sendto() failed: " . socket_strerror(socket_last_error($socket));
} else {
    echo "성공적으로 보냈습니다 {$sent} 바이트 데이터 {$ip}:{$port}\n";
}

// 폐쇄 socket
socket_close($socket);
?>

4. 요약

팩 () 함수를 통해 네트워크 프로토콜의 요구 사항을 충족하는 다양한 유형의 데이터를 이진 형식으로 유연하게 인코딩 할 수 있습니다. Socket_sendto () 와 결합하여 패키지 데이터는 UDP 프로토콜을 통해 지정된 서버로 전송되어 효율적인 네트워크 통신을 달성 할 수 있습니다.