我有一个关于ping某些游戏服务器的问题,看看它们是否活着,大多数服务器只使用标准的PHP ping就可以正常工作,但其他服务器则来自steam。。。蒸汽让我更难发出ping信号来判断它是否有生命,我试过蒸汽冷凝器,但。。。由于没有文档,所以不知道如何使用它。
我的问题
如何ping UDP游戏服务器,如Arma 2、Arma 3等。这就是我尝试的:
$host = '128.0.0.1';
$port = 1234;
$waitTimeoutInSeconds = 7;
if($fp = fsockopen("udp://".$host,$port,$errCode,$errStr))
{
echo 'Online';
}
else
{
echo 'Offline';
}
问题是,无论我使用什么IP或端口,我总是得到"true"返回,我如何才能做到这一点?
编辑我也试过
$host = '128.0.0.1';
$port = 1234;
$waitTimeoutInSeconds = 7;
if($fp = fsockopen("udp://".$host,$port,$errCode,$errStr))
{
$write = fwrite($fp,"x00");
if (!$write)
{
echo 'offline';
}
else
{
echo 'online';
}
}
else
{
echo 'offline';
}
fclose($fp);
然而,对于这个,我得到了错误代码0,这似乎是套接字初始化的问题?
我尝试了这个,删除了"udp://":
$host = '128.0.0.1';
$port = 1234;
$waitTimeoutInSeconds = 7;
if($fp = fsockopen($host,$port,$errCode,$errStr))
{
echo 'Online';
}
else
{
echo 'Offline';
}
它是有效的。这是返回文本:
警告:fsockopen():无法连接到第6行C:\examplep\htdocs\test.php中的128.0.0.1:1234(连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为所连接的主机没有响应。)离线
它认为不应该放"udp://",因为只使用端口号就足够了。
使用操作系统的ping实用程序,使用PHP执行终端ping命令。你可以在这里阅读:http://php.net/manual/en/function.shell-exec.php