Связь 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.

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 означает длину отправляемых данных. Во избежание потери данных, длина отправляемых данных должна быть меньше, чем оставшийся размер данных буфера. Настоятельно рекомендуется проверить оставшийся размер буфера отправки перед отправкой данных.