UDP 데이터 통신


데이터 수신

UDP 데이터를 수신하기 위해서는 pid_recvfrom함수를 사용합니다.
UDP 수신버퍼는 2개 이며, 다음과 같이 동작합니다.

※ 제품 별 UDP 수신버퍼의 크기는 부록을 참조하시기 바랍니다.

네트워크로부터 데이터 수신

udp communication 01

수신버퍼에 저장 된 데이터 읽기

pid_recvfrom 함수를 호출하면 수신버퍼에 저장 된 데이터를 읽고, 버퍼를 비웁니다.

udp communication 02

수신버퍼에 저장 된 데이터의 크기보다 작은 길이만큼 읽은 경우

수신버퍼에 읽고 남은 데이터는 버퍼를 비움과 동시에 유실됩니다.

udp communication 03

두 개의 수신버퍼에 모두 데이터가 있는 경우

두 개의 수신버퍼에 모두 데이터가 있는 경우 수신버퍼가 비워지기 전까지는 다음에 들어오는 데이터가 모두 유실됩니다. 따라서 항상 수신버퍼를 확인하여 데이터가 있으면 바로 데이터를 읽도록 프로그래밍 하는 것을 권장합니다.

udp communication 04

사용 예

이 예제는 UDP 수신 데이터 크기를 계속 확인하여 수신데이터가 있으면 데이터를 출력합니다.

<?php
$rbuf = "";
$pid = pid_open("/mmap/udp0");               // 0번 UDP 열기
pid_bind($pid, "", 1470);                    // 바인딩
while(1)                                     // 무한 루프
{
    $rxlen = pid_ioctl($pid, "get rxlen");   // 수신 데이터 크기 확인
    if($rxlen)
    {
        pid_recvfrom($pid, $rbuf, $rxlen);   // 데이터 수신
        echo "$rbuf\r\n";                    // 수신 데이터 출력
    }
    usleep(100000);
}
?>

데이터 송신

UDP 데이터를 송신하기 위해서는 pid_sendto함수를 사용합니다.

UDP 데이터 송신 예

<?php
$sdata = "01234567";
$pid = pid_open("/mmap/udp0");                            // 0번 UDP 열기
$slen = pid_sendto($pid, $sdata, 8, 0, "10.1.0.2", 1470); // 데이터 송신
echo "slen = $slen\r\n";                                  // 송신한 데이터 크기 출력
pid_close($pid);
?>