29 / 29 / 22
Регистрация: 27.12.2013
Сообщений: 368
1

Разбор ответа сервера

28.09.2016, 21:08. Показов 910. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Получаю данные от игрового сервера так (стандартный скрипт мониторинга для cs 1.6, но использую для другой игры):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function GetServerInfo($server,$port) {
     $fp = @fsockopen("udp://".$server, $port);
     if (!$fp) return false;
 
     @fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
     $start=time();
     socket_set_timeout($fp,1);
     $st=fread($fp,1);
     $r=socket_get_status($fp);
     $result['status'] = $r["timed_out"];
     $r=$r["unread_bytes"];
     if ($r == 0) { @fclose($fp); return false;}
     $st.=fread($fp,$r);
     @fclose($fp);
    var_dump($st);die();
     $st=substr($st,5);
     $address=SubStr($st,0,StrPos($st,chr(0)));
     $address=str_replace(chr(0),"|",$address);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $name=SubStr($st,0,StrPos($st,chr(0)));
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $map=SubStr($st,0,StrPos($st,chr(0)));
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $current=ord(SubStr($st,0,1));
     $max=ord(SubStr($st,1,1));
     
 
     if ($map == "") return false;
     $result['map'] = $map;
     $result['name']= $name;
     $result['current'] = $current;
     $result['max'] = $max;
 
     return $result;
}
 
$serv = GetServerInfo($server,$port);
 
if ($serv) {
echo '
Сервер: '.$server.':'.$port.'
<br>
Название: '.$serv['name'].'
<br>
Карта: '.$serv['map'].'
<br>
Игроков: '.$serv['current'].'/'.$serv['max'].'
<br>
Статус: On-line
';
} else {
echo 'Статус: Off-line';
}
Я остановил скрипт в нужном месте (var_dump($st);die() (15строка)
Ответ от сервера такой "string(115) "����IVinnytsya [UA]Procedural Maprustrust_server2lw1699�om`�@mp50,cp1,qp0,v1699,hfacd4e49J�"
Вопрос: как мне теперь разобрать эту кашу? Просто стандартный разбор:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$st=substr($st,5);
     $address=SubStr($st,0,StrPos($st,chr(0)));
     $address=str_replace(chr(0),"|",$address);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $name=SubStr($st,0,StrPos($st,chr(0)));
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $map=SubStr($st,0,StrPos($st,chr(0)));
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $current=ord(SubStr($st,0,1));
     $max=ord(SubStr($st,1,1));
... не подходит. (путаются данные)
А не подходит так как, игра другая и ответ немного другой. С подобным я ни разу не работал и как правильно теперь прочитать ответ не знаю. Подскажите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2016, 21:08
Ответы с готовыми решениями:

Анимирование ожидания ответа от сервера
Доброго времени суток сильно не пенайте не давно стал изучать PHP нашел пример Анимирование...

Выташить значение из ответа сервера
Как вытащить значение из ответа из сервера? ответ от сервера: &lt;response uid=&quot;847190&quot;...

Проверка на отказ ответа сервера
Всем привет! Я написал парсер, и иногда при его работе, я получаю сообщение о том. что сервер не...

Прием ответа от другого сервера
Добрый день, подскажите пожалуйста как принять или обработать такой ответ { &quot;id&quot;:...

5
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
28.09.2016, 21:13 2
Цитата Сообщение от Farrewa Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
$address=SubStr($st,0,StrPos($st,chr(0)));
$address=str_replace(chr(0),"|",$address);
$st=SubStr($st,StrPos($st,chr(0))+1);
$name=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$map=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$current=ord(SubStr($st,0,1));
$max=ord(SubStr($st,1,1));

Не по теме:

Огоо.

0
29 / 29 / 22
Регистрация: 27.12.2013
Сообщений: 368
28.09.2016, 21:16  [ТС] 3
P.S. Честно говоря в сокетах не шарю конкретно.
И этот кусок кода у меня просто ступор вызывает, не понимаю вообще что к чему в нем:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$st=substr($st,5);
     $address=SubStr($st,0,StrPos($st,chr(0)));
     $address=str_replace(chr(0),"|",$address);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $name=SubStr($st,0,StrPos($st,chr(0)));
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $map=SubStr($st,0,StrPos($st,chr(0)));
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $st=SubStr($st,StrPos($st,chr(0))+1);
     $current=ord(SubStr($st,0,1));
     $max=ord(SubStr($st,1,1));
Нормально сформулировать то что мне нужно не могу. Надеюсь вы поймете что мне нужно узнать

PSS Я так понимаю что кусок строки "����" тоже содержит какую-то инфу, но ее нужно правильно прочитать, как не пойму.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
28.09.2016, 21:24 4
Цитата Сообщение от Farrewa Посмотреть сообщение
но использую для другой игры
Цитата Сообщение от Farrewa Посмотреть сообщение
нужно правильно прочитать, как не пойму
Для этого нужно знать протокол обмена. Нельзя просто так взять набор байт и понять, что они содержат, не зная протокола.
0
29 / 29 / 22
Регистрация: 27.12.2013
Сообщений: 368
28.09.2016, 21:37  [ТС] 5
Цитата Сообщение от pav1uxa Посмотреть сообщение
Для этого нужно знать протокол обмена. Нельзя просто так взять набор байт и понять, что они содержат, не зная протокола.
В данном случае все прокатывает, в строке визуально видно данные
IVinnytsya [UA]Procedural Maprustrust - название
mp50 - слоты
cp1 - текущий онлайн
v1699 - версия

Нужно только все в читаемый вид привести. Тут-то и проблема, не preg_match же использовать.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
28.09.2016, 22:01 6
Цитата Сообщение от Farrewa Посмотреть сообщение
Нужно только все в читаемый вид привести.
Ну через substr() вытаскивайте)
0
28.09.2016, 22:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2016, 22:01
Помогаю со студенческими работами здесь

Как вытащить переменную из ответа сервера?
Помогите разобрать ответ сервера :)) Приходит вот такой запрос...

Отправить POST на сторонний сервер и попасть на страничку ответа этого сервера без формы
Здравствуйте, уважаемые знатоки! Прошу помочь мне со следующей задачкой, над которой бьюсь второй...

Убрать BOM символы с ответа сервера
Всем привет! Посылаю запрос серверу $response =...

Разбор ответа на POST запрос
Добрый вечер! Подскажите пожалуйста, сравниваю ответы на запрос полученные мной и из отладчика...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru