Для получения данных из сети через UDP, требуется функция pid_recvfrom. Есть 2 буфера приема UDP, внизу показан их принцип работы.
※ Обратитесь к Приложению для получения информации о размере буфера приема UDP в зависимости от типов продуктов.
После прочтения данных и буфера приема, РНРоС очищает буфер путем вызова функции pid_recvfrom.
Оставшиеся данные после считывания (непрочитанные) будут потеряны после буфера приема.
Хотя каждый из двух буферов приема имеет данные, которые, в свою очередь, содержат непрочитанные данные, последующие данные из сети не смогут быть получены. Поэтому рекомендуется сразу же после считывания полученных данных просмотреть данные в принятом буфере как можно скорее.
Пример выводит полученные данные UDP, каждую секунду проверяя, поступают ли данные из сети.
$rbuf = "";
$pid = pid_open("/mmap/udp0"); // open UDP 0
pid_bind($pid, "", 1470); // binding
while(1) // infinite loop
{
$rxlen = pid_ioctl($pid, "get rxlen"); // get received data size
if($rxlen)
{
pid_recvfrom($pid, $rbuf, $rxlen); // receive data
echo "$rbuf\r\n"; // print received data
}
usleep(100000);
}
Для отправления данных UDP data, необходима функция pid_sendto.
$sdata = "01234567";
$pid = pid_open("/mmap/udp0"); // open UDP 0
$slen = pid_sendto($pid, $sdata, 8, 0, "10.1.0.2", 1470); // send data
echo "slen = $slen\r\n"; // print size of send data
pid_close($pid);