UDP数据通信


接收UDP数据

为了接收UDP数据使用pid_recvfrom函数。 UDP接收缓冲区为2个,并如下工作。

※ 各产品UDP接收缓冲区的大小请参考附录Appendix

自网络接收数据

udp communication 01

读取保存在接收缓冲区的数据

提取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数据,使用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);