如何防止套接字连接关闭?

时间:2018-01-28 20:31:59

标签: php sockets

这是我的代码:

//main.php
$host = '127.0.0.1';
$port = 21626;

$socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($socket, $host, $port);
socket_getsockname($socket, $host, $port);
socket_listen($socket, 5);

$clients = [$socket];
while(true)
{
    $read = $clients;
    $write = [];
    $except = [];
    if (socket_select($read, $write, $except, 0.5) < 1){
        continue;
    }
    if (in_array($socket, $read)) {
        handle_request($socket);                       
    }                
}

function handle_request($socket)
{
    $client = socket_accept($socket); 
    $data = socket_read($client, 1024, PHP_NORMAL_READ); 
    socket_write($client, $data . "\n"); 
}

它创建在端口21626上运行的TCP服务器。要实际运行它,请执行以下操作:

$ php main.php

要提出请求,您可能需要像这样使用telnet:

$ telnet 127.0.0.1 21626

我面临的问题是每次发出请求时,服务器都会处理此请求,客户端套接字会立即关闭。它看起来像这样:

enter image description here

如您所见,我键入“Hello”,服务器响应echo并关闭连接。但我希望保持这种联系。

所以,我的问题是,为什么客户端套接字被关闭,即使我没有明确地这样做?

0 个答案:

没有答案