如何在php中ping UDP


How to ping UDP in php

我有一个关于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