За последние 24 часа нас посетили 20290 программистов и 1706 роботов. Сейчас ищут 1573 программиста ...

Помогите

Тема в разделе "Вопросы от блондинок", создана пользователем Chaynik, 2 май 2008.

  1. Chaynik

    Chaynik Guest

    Плиз помогите! Я совсем (смотрите мой ник). Короче проблема такая, есть отправка по протоколу udp пакетов на сервер! И есть приём их (как пинг-понг ты отправил тебе шлют и ты принимаешь) так вот а что если ты сделал пинг а сервер не включен вообщем не может сделать понг, в результате страница грузится, грузится потом Service Temporary Unavalible. Грузится долго, так вот можно сделать так что если в течение 5 секунд понг не прилетел писать Сервер отключен. А если пинг-понг прощёл удачно и понг вернулся то продолжить выполнение скрипта, вот скрипт
    PHP:
    1. <table width="250">
    2. <?
    3.     if ($_GET['ip']) $ip = $_GET['ip'];
    4.     if ($_GET['port']) $port = $_GET['port'];
    5.  
    6.     if (!isset($ip))
    7.         $ip = '90.189.17.107';
    8.     if (!isset($port))
    9.         $port = 7777;
    10.  
    11.     $fp = fsockopen('udp://' . $ip, $port, $errno, $errstr);
    12.     if (!$fp)
    13.     {
    14.         echo "<tr><td bgcolor=\"#FFFFFF\">Socket Error: $errno - $errstr</td></tr>\n";
    15.     }
    16.     else
    17.     {
    18.         $packet = 'SAMP';
    19.         $packet .= chr(strtok($ip, '.'));
    20.         $packet .= chr(strtok('.'));
    21.         $packet .= chr(strtok('.'));
    22.         $packet .= chr(strtok('.'));
    23.         $packet .= chr($port & 0xFF);
    24.         $packet .= chr($port >> 8 & 0xFF);
    25.  
    26.         fwrite($fp, $packet.'i');
    27.         fread($fp, 11);
    28.    
    29.         $is_passworded = ord(fread($fp, 1));
    30.         $plr_count     = ord(fread($fp, 2));
    31.         $max_plrs      = ord(fread($fp, 2));
    32.         $strlen        = ord(fread($fp, 4));
    33.         $hostname      = fread($fp, $strlen);
    34.         $strlen        = ord(fread($fp, 4));
    35.         $gamemode      = fread($fp, $strlen);
    36.         $strlen        = ord(fread($fp, 4));
    37.         $mapname       = fread($fp, $strlen);
    38.  
    39.         echo '      <tr><td bgcolor="#FFFFFF" colspan="2" align="center"><b>' . $hostname . '</b></td></tr>'."\n";
    40.         echo '      <tr><td bgcolor="#FFFFFF" width="100">Players: </td><td bgcolor="#FFFFFF" width="250">' . $plr_count . ' / ' . $max_plrs . '</td></tr>'."\n";
    41.         echo '      <tr><td bgcolor="#FFFFFF">Мод: </td><td bgcolor="#FFFFFF">' . $gamemode . '</td></tr>'."\n";
    42.         echo '      <tr><td bgcolor="#FFFFFF">Название карты: </td><td bgcolor="#FFFFFF">' . $mapname . '</td></tr>'."\n";
    43.         if ($is_passworded)
    44.         {
    45.             echo '      <tr><td bgcolor="#FFFFFF">Запаролен: </td><td bgcolor="#FFFFFF">Да</td></tr>'."\n";
    46.         } else {
    47.             echo '      <tr><td bgcolor="#FFFFFF">Запаролен: </td><td bgcolor="#FFFFFF">Нет</td></tr>'."\n";
    48.         }
    49.  
    50.         fwrite($fp, $packet.'c');
    51.         fread($fp, 11);
    52.         $plr_count = ord(fread($fp, 2));
    53.         if ($plr_count > 0)
    54.         {
    55.             echo '    </table><br>'."\n";
    56.             echo '    <table width="350" bgcolor="#FFFFFF" cellpadding="4" cellspacing="1" align="center">'."\n";
    57.             echo '      <tr><td bgcolor="#FFFFFF" colspan="2" align="center"><b>Игроки:</b></td></tr>'."\n";
    58.             echo '      <tr><td bgcolor="#FFFFFF" align="center" width="250"><b>Игрок</b></td><td bgcolor="#FFFFFF" align="center" width="100"><b>Фраги</b></td></tr>'."\n";
    59.             for ($i=0; $i<$plr_count; $i++)
    60.             {
    61.                 $strlen = ord(fread($fp, 1));
    62.                 $plrname = fread($fp, $strlen);
    63.                 $score = samp_getLong(fread($fp, 4));
    64.                
    65.                 echo '      <tr><td bgcolor="#FFFFFF">' . $plrname . '</td><td bgcolor="#FFFFFF">' .
    66. $score  . '</td></tr>'."\n";
    67.             }
    68.         }
    69.         fclose($fp);
    70.     }
    71. ?>
    72.     </table><br>
    73. <? function samp_getLong($dat) {
    74.     $num=0;
    75.     if ((ord(substr($dat,3,1)) & 128) > 0) {
    76.         for ($i=0; $i<strlen($dat); $i++) {
    77.             $num-=((255-ord(substr($dat,$i,1))) << 8*$i);
    78.         }
    79.         $num--;
    80.     } else {
    81.         for ($i=0; $i<strlen($dat); $i++) {
    82.             $num+=(ord(substr($dat,$i,1)) << 8*$i);
    83.         }
    84.     }
    85.     return $num;
    86. }
    87.  
    Если пакеты не возвращаются в течении 5 секунд то писать Сервер отключен если пакеты вернулись (понг) то продолжить выполнение скрипта (отпарсить и вывести как это делается там написано). Думаю так понятно? Короче помогите! И где же [​IMG] ???? :roll:
     
  2. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Тема переехала к блондинкам из-за названия.
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  4. Chaynik

    Chaynik Guest

    МЛИН Я НЕ ЖЕНЩИНА!
     
  5. Chaynik

    Chaynik Guest

    спс конечно а как сделать чтобы если понг не вернулся а таймаут прошёл чтобы он писал Сервер выключен
     
  6. Chaynik

    Chaynik Guest

    аа всё понял извините!
     
  7. Chaynik

    Chaynik Guest

    мм, не работает!
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не работает ваш код? Я-то тут причем? :)
    Я вообще делал через exec с помощью виндовой службы ping, но это был чистый пинг на работоспособность и соединение.
     
  9. Chaynik

    Chaynik Guest

    а мне другое нужно, ещё чуть чуть посижу и забаню себя
     
  10. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    А ведёшь себя как блондинка =)
     
  11. Chaynik

    Chaynik Guest

    набирай в адресной строке находясь на этой странице
    Код (Text):
    1. javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0)
    и нажимай энтер поднимайся на самый верх страницы, веселись, ставь + (ах да тут же нельзя), взято с последней страницы раздела Юмор название темы Возможности JavaScript
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А чего сверхъестественного в этой функции?
     
  13. Johnatan

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

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Ахахаха... Прикольно. :))))))
     
  14. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Таймаут же с протоколом udp не работает. Вроде.

    Chaynik, где-то тема была пару месяцев назад, в ней вопрос обсуждался. Поищи по форуму по слову udp.
     
  15. Chaynik

    Chaynik Guest

    жаль :( пойду банить себя