gpt4 book ai didi

php - 检查PHP套接字服务器中的断开连接客户端

转载 作者:行者123 更新时间:2023-12-03 12:04:03 24 4
gpt4 key购买 nike

#!/usr/local/bin/php -q 
<?

set_time_limit (0);

$address = '192.168.0.201';
$port = 1077;

$max_clients = 10;

$clients = Array();

$sock = socket_create(AF_INET, SOCK_STREAM, 0);

socket_bind($sock, $address, $port) or die('fail.');

socket_listen($sock);

while (true) {
$read[0] = $sock;
for ($i = 0; $i < $max_clients; $i++)
{
if ($client[$i]['sock'] != null)
$read[$i + 1] = $client[$i]['sock'] ;
}
$write=NULL;
$exceptions=NULL;
$ready = socket_select($read,$write,$exceptions,null);

if (in_array($sock, $read)) {
for ($i = 0; $i < $max_clients; $i++)
{
if ($client[$i]['sock'] == null) {
$client[$i]['sock'] = socket_accept($sock);
break;
}
elseif ($i == $max_clients - 1)
print ("many clients");
}
if (--$ready <= 0)
continue;
}

for ($i = 0; $i < $max_clients; $i++)
{
if (in_array($client[$i]['sock'] , $read))
{
$input = socket_read($client[$i]['sock'] , 1024);
if ($input == null) {
unset($client[$i]);
}
$n = trim($input);
if ($input == 'exit') {
socket_close($client[$i]['sock']);
} elseif ($input) {

$host = 'localhost';
$uname = 'root';
$pwd = 'taek0526';
$db = 'InputTest';

$con = mysql_connect($host,$uname,$pwd) or die("connection failed");
mysql_select_db($db,$con) or die("db selection failed");
mysql_query("set names utf8");

$data = explode(" ", $input);

mysql_query("INSERT INTO `test`(`data1`, `data2`) VALUES ('".$data[0]."', '".$data[1]."')");

mysql_close($con);

}
} else {
}
}
}
socket_close($sock);
?>

这是关于服务器的示例代码。

当我测试此代码时,出现问题。如果客户端关闭程序没有发送“退出”客户端,则客户端将无法再次连接,我将杀死服务器进程并重新启动;之后,客户端可以再次连接。

我认为仍然有一些有关先前连接的数据。

如何检查断开客户端连接?

然后,如何删除有关断开连接客户端的数据?
for ($i = 0; $i < $max_clients; $i++) {
if( Check disconnect ){
disconnect work
}
}

我想制作代码并像这样添加,但是我没有套接字的php功能。

最佳答案

How to check disconnect clients?



您已经通过以下行进行了此检查:
            if ($input == null) { 

你忘了也要插入
                socket_close($client[$i]['sock']);


                unset($client[$i]); 

或者你可能想结合
            if ($input == null or trim($input) == 'exit')
{
socket_close($client[$i]['sock']);
unset($client[$i]);

And then, how to remove data about disconnect clients?



除了上面的 unset($client[$i])外,您还必须替换
    $read[0] = $sock; 


    $read = Array($sock);

清除上一个循环周期中的数组元素。

关于php - 检查PHP套接字服务器中的断开连接客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39053774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com