|
|
|
Думаю, как проверить наличие включенности/выключенности TCP серверов умеют многие. Если нет посмотрите в мануале PHP описание функции fsockopen(). Там же есть пример для UDP.
Новички, пытающиеся мониторить UDP сервера (большинство игровых), не знают важной особенности: необходимо послать UDP серверу соответствующий пакет, который он понимает, и если он работает, от отошлет свой пакет в ответ.
Посмотрим, как это делается:
- <?php
-
- $fp = fsockopen("udp://games.utech.ru", 27960, $errno, $errstr);
- if (!$fp) {
- echo "ERROR: $errno - $errstr
- \n"; #$errno - номер ошибки, $errstr - описание ошибки
- } else {
- $packet="яяяяgetstatus\x00"; #содержимое отправляемого пакета
- fwrite($fp, $packet);
- echo fread($fp, 4096);
- fclose($fp);
- }
-
- ?>
fsockopen() - соединение с сервером через определенный порт
fwrite() - отправляет пакет серверу
fread() - принимает входящий пакет, в данном случае макс. размер пакета 4096 байт
fclose() - закрывает соединение с сервером, созданное функцией fsockopen()
В этом примере проверяется на включенность Quake 3 сервер, и если сервер работает, мы получим в ответ примерно следующее:
яяяяstatusResponse \sv_hostname\games.utech.ru duel #2\capturelimit\8\sv_floodProtect\0\sv_maxPing\0\sv_minPing\0\sv_maxRate\10000\ sv_punkbuster\0\sv_maxclients\14\timelimit\15\fraglimit\0\dmflags\0\version\Q3 1.32 win-x86 Oct 7 2002\g_gametype\1\protocol\68\mapname\ztn3tourney1\sv_privateClients\2\ sv_allowDownload\1\server_ospauth\0\server_promode\0\gamename\osp\gameversion\OSP v1.03a\Players_Active\(None)\Score_Time\Waiting for Players\g_needpass\0\ server_freezetag\0
Здесь находится основная информация по серверу, и её остается только дифференцировать по переменным. |
Есть вопросы по настройке игровых серверов? Добро пожаловать на форум!
|
|
|
© 20062014,
HarpyWar
Любое копирование информации с этого сайта - только со ссылкой на источник.
Это в одинаковой мере распространяется на любую авторскую информацию в интернете.