连接后保持PHP Server套接字活动

时间:2017-11-01 09:53:28

标签: php sockets xampp

我有一个服务器套接字页面,基本上接收一个字符串,将其反转并将其发送回客户端,这完美无缺,套接字在连接后关闭,尝试修复此但无效,任何人都可以告诉我我做错了什么?

    $host = "192.168.8.121";
    $port = 232;

    set_time_limit(0);

    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");

    $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");

    $result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

    $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");

    $input = socket_read($spawn, 1024) or die("Could not read input\n");


    $input = trim($input);
    echo "Client Message : ".$input;

    // reverse client input and send back
    $output = strrev($input) . "\n";
    socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");

    // close sockets
    socket_close($spawn);
    socket_close($socket);

1 个答案:

答案 0 :(得分:0)

你需要一个套接字读取循环:

function error($socket) {
    return socket_strerror(socket_last_error($socket));
}

$host = "127.0.0.1";
$port = 1024;

set_time_limit(0);

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or
          die(__LINE__ . ' => ' . error($socket));

$result = socket_bind($socket, $host, $port) or
          die(__LINE__ . ' => ' . error($socket));

$result = socket_listen($socket, 3) or
          die(__LINE__ . ' => ' . error($socket));

$spawn = socket_accept($socket) or
         die(__LINE__ . ' => ' . error($socket));

while(true) {

    $input = socket_read($spawn, 1024) or
             die(__LINE__ . ' => ' . error($socket));

    $input = trim($input);

    if ($input == 'exit') {
        echo 'exiting from server socket read loop';
        break;
    }

    echo "Client Message : " . $input . '<br>';

    // reverse client input and send back
    $output = strrev($input) . "\n";
    socket_write($spawn, $output, strlen($output)) or
    die(__LINE__ . ' => ' . error($socket));

}

// close sockets
socket_close($spawn);
socket_close($socket);