2014-01-11 2 views
0

Я хочу Ping-сервер на основе IP и порта. Почему порт? Поскольку система, что я строю будет Login Server и сервер игры на различных ПОРТОВ прямо сейчас я использую 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() can not ping на порт.

с fsockopen Я могу взять только латентность (это не так правильно).

Если кто-нибудь знает, как могу я получить Latensy, пакеты отправить | RECIVED, джиттера и т.д.

Может быть какой-то 3-й партии API для PHP Ping. Заранее спасибо

+0

Duplicate? нет ответа на hot to ping IP + PORT без 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 является layer3 протокол, но номер порта определяется в LAYER4. Таким образом, вы никогда не находите номер порта в ICMP-пакете

Это означает, что вы можете получить задержку между двумя хостами (IP), но вы не можете получить задержку между IP-портами.

Смежные вопросы