Связь UDP


Получение данных UDP

Для получения данных из сети через UDP, требуется функция pid_recvfrom. Есть 2 буфера приема UDP, внизу показан их принцип работы.

※ Обратитесь к Приложению для получения информации о размере буфера приема UDP в зависимости от типов продуктов.

Примем данных UDP из сети

udp communication 01

Чтение данных UDP из буфера приема

После прочтения данных и буфера приема, РНРоС очищает буфер путем вызова функции pid_recvfrom.

udp communication 02

Чтение данных размером меньше, чем полученных

Оставшиеся данные после считывания (непрочитанные) будут потеряны после буфера приема.

udp communication 03

Потеря данных по причине отсутствующего буфера приема

Хотя каждый из двух буферов приема имеет данные, которые, в свою очередь, содержат непрочитанные данные, последующие данные из сети не смогут быть получены. Поэтому рекомендуется сразу же после считывания полученных данных просмотреть данные в принятом буфере как можно скорее.

udp communication 04

Пример

Пример выводит полученные данные 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

Для отправления данных UDP data, необходима функция pid_sendto.

Пример отправки данных UDP

$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);