2014-01-11 57 views
0

我想Ping一台基于IP和端口的服务器。为何端口? 因为那我建设将有不同的端口登录服务器和游戏服务器系统 现在我使用fsockopenPHP ping IP:端口

 $start = microtime(true); 
     $fp = @fsockopen($host, $port, $errno, $errstr, $timeout); 
     if (!$fp) { 
      return false; 
     } 
     else { 
      $ping = microtime(true) - $start; 
      $ping = round($ping * 1000); 
      $res['ip'] = $host; 
      $res['port'] = $port; 
      $res['ping'] = $ping; 
      $res['msg'] = 'success'; 
      return $res; 
     } 

我不能,我不wan't使用EXEC()1。 IP和端口将由用户输入,exec()不能ping通端口。

与fsockopen我只能采取延迟(这是不正确的)。

如果有人知道我怎么不能得到Latensy,数据包发送| recived,抖动等

也许某种第三方API为PHP平。 预先感谢您

+0

重复?有没有答案在热ping IP +端口没有fsockopen – Froxz

+0

对不起,我的坏。无论如何,你能详细说明一下你的情况吗? Ping工作在ICMP协议上,所述不同端口上的登录服务器/游戏服务器是否也使用ICMP?我认为他们应该如果你想实际使用“ping”。 – Gadoma

+0

是登录服务器/游戏服务器使用ICMP – Froxz

回答

1

您必须使用socket_create(),因为ping使用ICMP,而fsockopen仅用于TCP和UDP。 ICMP回应数据包不指定任何端口。在socket_create手册中,用户注释中有几个ping()示例实现。

1

可以检查ICMP分组格式中RFC 792

尽管ICMP是三层协议,但是端口号在layer4定义。所以你永远不会在ICMP包中找到端口号

这意味着,你可以在两个主机(IP)之间获得延迟,但是你不能在IP:端口之间获得延迟。