За последние 24 часа нас посетили 38075 программистов и 1808 роботов. Сейчас ищут 905 программистов ...

UDP timeout

Тема в разделе "Прочие вопросы по PHP", создана пользователем AlexALX, 29 сен 2007.

  1. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Здраствуйте! Я тут научися немного рпограмировать на php, разобрался с базами и тд... Но тепер ьвопрос, сам уже много чего перепробывал, и не вышло, как сделать в UDP timeout?

    Вот чтобы если неконектилось с сервером писало сервер недоступен...

    Вся проблемма в том что:
    $fp = fsockopen('udp://' . $ip_0, $port_0);
    Тут таймаут не поддерживается.
    $ip_0 = 193.138.147.23
    а $port_0 = 8000
    вот так как сделать чтобы оно если не конектилось к серверу то загружло например:
    if (!fp) {
    echo 'сервер не работает';
    } else {
    echo 'сервер работает';
    }
    жду ответа... Это сервер SA-MP
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    У мну работает таймаут указаный в параметре:
    Код (Text):
    1. $ip_0 = '193.138.147.23';
    2. $port_0 = 8000;
    3.  
    4. $fp = @fsockopen($ip_0, $port_0, $errno, $errstr, 2); // 2 это время на попытку коннекта
    5. if (!$fp){
    6.     echo 'Нет эрекции :(.';
    7. } else {
    8.     echo 'Штучка работает.';
    9. }
    php 5.2.3.
     
  3. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Неа, не выходит, тут именно для сервера SA-MP нужно конектится только через UDP... без всегда пишет Нет эрекции :( а если с то:

    Если с UDP то всегда пишет есть конект...

    скрипт такой:

    Код (Text):
    1. <?php
    2. /*---------------------------------------------------+
    3. | PHP-Fusion 6 Content Management System
    4. +----------------------------------------------------+
    5. | Copyright © 2002 - 2005 Nick Jones
    6. | http://www.php-fusion.co.uk/
    7. +----------------------------------------------------+
    8. | Released under the terms & conditions of v2 of the
    9. | GNU General Public License. For details refer to
    10. | the included gpl.txt file or visit http://gnu.org
    11. +----------------------------------------------------*/
    12.  
    13. /*
    14.   Created for PHP-FUSION 6.01.11
    15.   © 2007 by AlexALX
    16.   http://www.alexalx-soft.com/
    17. */
    18.  
    19. $ip_0 = '193.138.147.23';
    20. $port_0 = '8000';
    21.  
    22. $fp = @fsockopen('udp://' . $ip_0, $port_0, $errno, $errstr, 2); // 2 это время на попытку коннекта
    23. if (!$fp){
    24.     echo 'Нет эрекции :(.';
    25. } else {
    26.     echo 'Штучка работает.';
    27. }
    28. ?>
     
  4. Anonymous

    Anonymous Guest

    Хм... а чего вы хотели? в UDP нет контроля получения пакетов. В нем можно проверять только наличие ответа....
     
  5. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Ну тогда как сделать так чтобы оно при неконекте писало нет конекта?
     
  6. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Я сумел сделать таймаут... но теперь выходит так...

    Код (Text):
    1. Warning: fread() [function.fread]: Length parameter must be greater than 0 in /usr/home/vshosts/hosts/u5034/alexalx-soft.com/www/infusions/sa-mp/sa-mp.php on line 93
    2. Сервер не работает.
    как можно эту ошибку спрятать?
    вот код:

    Код (Text):
    1. socket_set_timeout($fp, 2);
    2.  
    3.         $packet = 'SAMP';
    4.         $packet .= chr(strtok($ip_0, '.'));
    5.         $packet .= chr(strtok('.'));
    6.         $packet .= chr(strtok('.'));
    7.         $packet .= chr(strtok('.'));
    8.         $packet .= chr($port_0 & 0xFF);
    9.         $packet .= chr($port_0 >> 8 & 0xFF);
    10.  
    11.         fwrite($fp, $packet.'i');
    12.         fread($fp, 11);
    13.         $is_passworded = ord(fread($fp, 1));
    14.         $plr_count     = ord(fread($fp, 2));
    15.         $max_plrs      = ord(fread($fp, 2));
    16.         $strlen        = ord(fread($fp, 4));
    17.         $hostname      = fread($fp, $strlen);
    18.  
    19. if (!$hostname) {
    20. echo 'Сервер не работает.'; } else {
     
  7. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    AlexALX, я ступил, извиняюсь. Протокол не указал и тупо обрадовался, что может как-то прикрутили :).

    Код (Text):
    1. $hostname      = @fread($fp, $strlen);
    ?

    upd
    Код (Text):
    1. if ($strlen)
    2. $hostname      = fread($fp, $strlen);
    ?
     
  8. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Блин. скрипт большой, я дал только кусок маленький, там где таймаут сделать нужно... как спрятать ошибку? я только с ошибкой смог таймаут сделать...
     
  9. AlexALX

    AlexALX Активный пользователь

    С нами с:
    13 июн 2007
    Сообщения:
    294
    Симпатии:
    5
    Адрес:
    Киев
    Всё, я разобрался, всё сделал всё пашет :)