如何在 php 中 ping UDP

How to ping UDP in php

我有一个关于对某些游戏服务器执行 ping 操作以查看它们是否存在的问题,大多数仅使用您的标准 PHP ping 就可以正常工作,但其他服务器来自 steam...而 steam 正在使它更我很难发送一个 ping 来查看它是否还活着,我尝试了 Steam Condenser 但是...不知道如何使用它,因为没有文档。

我的问题

如何 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,这似乎是套接字初始化的问题?

如何使用 OS 的 ping 实用程序,使用 PHP 执行终端 ping 命令。您可以在这里阅读:http://php.net/manual/en/function.shell-exec.php

我尝试了这个,删除了 "udp://" :

 $host = '128.0.0.1';
 $port =  1234; 
 $waitTimeoutInSeconds = 7; 
 if($fp = fsockopen($host,$port,$errCode,$errStr))
 {   
    echo 'Online'; 
 }
 else
 {
    echo 'Offline';
 } 

并且有效。这是 return 文本:

Warning: fsockopen(): unable to connect to 128.0.0.1:1234 (A connection attempt failed because the connected party didn't properly respond after a period time, or established connection failed because connected host has failed respond.

警告:fsockopen(): unable to connect to 128.0.0.1:1234 .) 在第 6 行的 C:\xampp\htdocs\test.php 中 离线

我认为您不应该输入 "udp://",因为仅使用端口号就足够了。