UDP 데이터를 수신하기 위해서는 pid_recvfrom함수를 사용합니다.
UDP 수신버퍼는 2개 이며, 다음과 같이 동작합니다.
※ 제품 별 UDP 수신버퍼의 크기는 부록을 참조하시기 바랍니다.
pid_recvfrom 함수를 호출하면 수신버퍼에 저장 된 데이터를 읽고, 버퍼를 비웁니다.
수신버퍼에 읽고 남은 데이터는 버퍼를 비움과 동시에 유실됩니다.
두 개의 수신버퍼에 모두 데이터가 있는 경우 수신버퍼가 비워지기 전까지는 다음에 들어오는 데이터가 모두 유실됩니다. 따라서 항상 수신버퍼를 확인하여 데이터가 있으면 바로 데이터를 읽도록 프로그래밍 하는 것을 권장합니다.
이 예제는 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함수를 사용합니다.
<?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);
?>