TCP数据通信


接收TCP数据

自网络进来的TCP数据保存在接收缓冲区。 通过pid_recv函数读取保存在此接收缓冲区的值。

tcp communication 01

如下使用pid_recv函数。

pid_recv($pid, $value[, $len]);

使用例

此例中每秒确认自TCP接收的数据并输出。

$rdata = "";
$pid = pid_open("/mmap/tcp0");              // open TCP 0
pid_connect($pid, "10.1.0.2", 1470);        // TCP active connection
do
{
    sleep(1);
    $state = pid_ioctl($pid, "get state");  // get TCP session state
    $rxlen = pid_ioctl($pid, "get rxlen");  // get received data size
    $rlen = pid_recv($pid, $rdata, $rxlen); // receive data
    echo "rlen = $rlen / ";                 // print received data size
    echo "rdata = $rdata\r\n";              // print received data
    if($rlen)
        $rdata = "";                        // flush receive buffer
}
while($state == TCP_CONNECTED);
pid_close($pid);

发送TCP数据

利用pid_send函数将发送数据保存在发送缓冲区并传送到网络。

tcp communication 01

如下使用pid_send函数。

pid_send($pid, $value[, $len]);

此例通过确认发送缓冲区的空间向TCP传送数据。

$sdata = "0123456789";
$pid = pid_open("/mmap/tcp0");                  // open TCP 0
pid_connect($pid, "10.1.0.2", 1470);            // TCP active connection
do
{
    sleep(1);
    $state = pid_ioctl($pid, "get state");      // get session state
    // get available space of send buffer
    $txfree = pid_ioctl($pid, "get txfree");    
    $tx_len = pid_send($pid, $sdata, $txfree);  // send data
    echo "tx len = $tx_len\r\n";                // print size of send data
}
while($state == TCP_CONNECTED);
pid_close($pid);

在上面代码中pid_send函数的第三行参数代表要发送的数据大小。 当发送数据比发送缓冲区的空间大时,数据会流失。 因此建议一向要确认缓冲区大小后设定等于或小于其值以下的数据。