保持PHP服务器套接字连接后仍保持活动状态

3

我有一个服务器套接字页面,基本上接收一个字符串,将其反转并发送回客户端,这个功能运行得很完美,但是套接字在连接后关闭了,尝试修复它但无济于事,有人能告诉我我做错了什么吗?

    $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);

希望这可以帮到您:https://dev59.com/ynzaa4cB1Zd3GeqPVuJl - may saghira
1个回答

1
你需要一个套接字读取循环。
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接