【问题标题】:Keeping PHP Server socket alive after connection连接后保持 PHP Server 套接字处于活动状态
【发布时间】:2018-04-13 14:38:37
【问题描述】:

我有一个服务器套接字页面,它基本上接收一个字符串,将其反转并将其发送回客户端,效果很好,但是套接字在连接后关闭,尝试修复此问题但无济于事,谁能告诉我我做错了什么?

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

【问题讨论】:

标签: php sockets xampp


【解决方案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);

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2012-01-03
    • 2021-09-13
    • 2013-08-27
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多