Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсинг ответа из сокета
Форумы портала PHP.SU » » Работа с сетью » Парсинг ответа из сокета

Страниц (1): [1]
 

1. Sanchis - 26 Мая, 2013 - 12:48:53 - перейти к сообщению
Доброго времени! Пишу скрипт игрового мониторинга, отправляю запрос на сервер и получаю ответ
Вот код отправки и получения

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.      error_reporting(E_ALL);
  4.         $soket = fsockopen("tcp://66.151.138.118", 48888, $errno, $errstr);  
  5.           if (!$soket) {  
  6.              echo "ERROR: $errno - $errstr\n";
  7.           }
  8.           else {
  9.                 $request = "\x00\x00\x00\x00\x24\x00\x00\x00\x02\x00\x00\x00\x0b\x00\x00\x00listPlayers\x00\x03\x00\x00\x00\x61ll\x00";
  10.                 fwrite($soket, $request);
  11.                 socket_set_blocking($soket,1);
  12.           /* Получить данных в переменную */
  13.                         $player = fread($soket, 4096);
  14.                         print_r ($player);                             
  15.         fclose($soket);
  16.           }
  17. ?>
  18.  


Вот ответ на этот запрос

Цитата:

@ ,OK9clanTagnameguidteamIdsquadIdkillsdeathsscoreping32Invalid StickFawk2167625151Invalid noxa124916820224[J5] BountyRooster255886295The Commissioner25413855160DICEKilla132277715335x mozu x2511101600230rus51kiril512258620262 ChiwAwA <31219112050182 rokkaku_nat05131171415157 Still in Beta12912105586ECOHOHO2456445231ASixFootKitten1398870194Invalid Ruike151491235206crazyEscalad315611815352Invalid Radoot22312880104[ZISSOU] Dingo-Dingo21711120090 ComputronX2210111164114282 Yasherica251642300278Invalid Huy Mac128786995


Вот ответ включая не видимые символы

Цитата:

@SQ,SOHSTHOKSOH9BELclanTagEOTnameEOTguidACKteamIdBELsquadIdENQkillsACKdeathsENQscoreEOTpingSTX32BSInvalid StickFawkSOH2SOH1SOH625SOHSOH7 ETX 625 ETX 151 BS Invalid ENQ noxa1 SOH 2 SOH 4 SOH 9 STX 16 ETH 820


Как видите порядка в этих символах тоже не много при чем они меняются при каждом новом запросе.

Разобрать нужно на массивы которые будут содержать в себе информацию о игроках примерно так

PHP:
скопировать код в буфер обмена
  1.  
  2. // Первый пользователь
  3.  
  4. [0]->Invalid
  5. [1]->StickFawk21
  6. [2]->2
  7. [3]->6
  8. [4]->7
  9. [5]->625
  10. [6]->151
  11.  
  12. // Второй пользователь
  13.  
  14. [7]-> (Пустое значение т.к. клан тега нет)
  15. [8]->noxa1
  16. [9]->2
  17. [10]->4
  18. [11]->9
  19. [12]->16
  20. [13]->820
  21. )
  22.  


Вся беда в том, что опыта в программировании не так много для такого скрипта и я пытаюсь уловить логику уже трое суток, подскажите пожалуйста, как решить эту задачу?
2. LIME - 26 Мая, 2013 - 13:31:29 - перейти к сообщению
explode
3. Sanchis - 26 Мая, 2013 - 14:02:09 - перейти к сообщению
LIME пишет:
explode

Это понятно но по каким разделителям??? В том и дело что логику уловить не могу. Дело в том, что в начале строки клан тег и ник отделены бэкспэйсом BS но далее перед каким нибуть ником он отсутствует или присутствует другой, или между клан тегом и ником отсутствует (наверное связано с тем что приходит порциями), включит как разделитель обычный пробел так же не представляется возможным т.к. эти пробелы иногда должны остаться

 

Powered by ExBB FM 1.0 RC1