自网络进来的TCP数据保存在接收缓冲区。 通过pid_recv函数读取保存在此接收缓冲区的值。
如下使用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);
利用pid_send函数将发送数据保存在发送缓冲区并传送到网络。
如下使用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函数的第三行参数代表要发送的数据大小。 当发送数据比发送缓冲区的空间大时,数据会流失。 因此建议一向要确认缓冲区大小后设定等于或小于其值以下的数据。