gpt4 book ai didi

php - PHP套接字程序挂起

转载 作者:行者123 更新时间:2023-12-03 11:55:28 25 4
gpt4 key购买 nike

我有一个用PHP编写的套接字服务器程序,由Fedora 21-apache运行,在端口上监听。

<?php

set_time_limit (0);

$address = '1.2.3.4';

$port = "19000";
$con = 1;
$word = "";

$sock = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$bind = socket_bind($sock, $address, $port) or die("Could not bind to socket\n");

socket_listen($sock);
while ($con == 1)
{
$client = socket_accept($sock);
$input = socket_read($client, 50);

if ($input == 'exit')
{
$close = socket_close($sock);
$con = 0;
}
else {
$input = trim($input) . "," . date('Y-m-d H:i:s') . "\n";
$file= "/home/xyz/data/" . "uls_" . date("Ymd_His") . ".dat";
file_put_contents($file, $input);
}

}

?>

客户端实际上是一台设备。当前只有一台设备正在运行。
根据设备提供的文档,
“它充当TCP客户端,并打开到服务器的TCP套接字 session 。
然后,设备发送消息并断开套接字 session 。连接失败,将导致重试”

现在,我能够从此客户端获取数据。问题是4-5小时后客户端无法推送数据。服务器套接字挂起。
netstat -taun命令显示如下。

tcp 0 0 1.2.3.4:19000 0.0.0.0:*听

tcp 0 0 1.2.3.4:19000 3.4.5.6:20721已建立

有时可以看到多个客户端连接。

我可以确认客户端在这段时间内仍在运行。我试图通过另一个客户端套接字脚本连接到此服务器套接字。
结果显示,发出了客户端请求,但服务器套接字未响应。

如果重新启动Web服务器,然后再次运行服务器脚本,则一切正常运行一段时间。

谁能帮助我确定问题所在。

最佳答案

我遇到了同样的问题,我通过关闭socket_accept()构建的资源来解决此问题

while ($con == 1)
{
$client = socket_accept($sock);
$input = socket_read($client, 50);

if ($input == 'exit')
{
$close = socket_close($sock);
$con = 0;
}
else {
$input = trim($input) . "," . date('Y-m-d H:i:s') . "\n";
$file= "/home/xyz/data/" . "uls_" . date("Ymd_His") . ".dat";
file_put_contents($file, $input);
}

// @param2 - 1 => block writing in socket ...
socket_shutdown ($client , 1) ;
socket_close ($client ) ;
}

关于php - PHP套接字程序挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387645/

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