Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odczytywanie (?) socketu
Forum PHP.pl > Forum > PHP
Dominator
Witam,
może mi ktoś wytłumaczyć co oznaczają poszczególne linijki kodu? (a mianowicie takie coś jak /xfe, /x00)

  1. if ( $sock = @stream_socket_client('tcp://'.$url.':'.$port, $errno, $errstr, 1) ) { //tego nie
  2.  
  3. fwrite($sock, "\xfe");
  4. $h = fread($sock, 2048);
  5. $h = str_replace("\x00", '', $h);
  6. $h = substr($h, 2);
  7. $data = explode("\xa7", $h);
  8. unset($h);
  9. fclose($sock);
Crozin
Dokumentacja: http://php.net/manual/en/regexp.reference.escape.php
Dominator
Ma ktoś może jakieś proste przykłady wykorzystywania tego? W manualu nie ma żadnego konkretnego przykładu i nie bardzo wiem jak tego użyć w praktyce
Crozin
Chociażby kod, który podałeś jest dobrym przykładem wykorzystania tego. Jak inaczej chciałbyś zapisać np. NUL-a (0x00) jak nie przez coś w stylu \x00.
Dominator
Czyli robię "zapytanie" do socketu o dane i takie coś jak "\x00" to odczytuje je, ale ... i tu jest jedno ale - skąd miałbym wiedzieć (bo to jest przykład z neta), że aby odczytać dane trzeba użyć np: \x00?

Ogólnie dziś zacząłem ogarniać sockety i prosiłbym o nie krytykowanie i po co zostało tu użyte fwrite($sock, "\xfe"); ?
Crozin
Żeby odczytać dane korzystasz z fread, nie podajesz tam żadnego znaku. W powyższym kodzie funkcja str_replace użyta jest w celu wymazania wszystkich znaków NUL (0x00) (zastąpienia ich niczym). W jakim celu jest to robione? Nie mamy pojęcia. Po co zapisujesz znak 0xFE? Również nie mamy pojęcia. Możesz wysłać cokolwiek i odczytać cokolwiek. Musisz wiedzieć z czym masz do czynienia zanim zaczniesz z tym pracować, czyli musisz znać jakąś specyfikację przesyłanych i odczytywanych danych.
Dominator
Cytat(Crozin @ 14.05.2015, 18:20:04 ) *
Żeby odczytać dane korzystasz z fread, nie podajesz tam żadnego znaku. W powyższym kodzie funkcja str_replace użyta jest w celu wymazania wszystkich znaków NUL (0x00) (zastąpienia ich niczym). W jakim celu jest to robione? Nie mamy pojęcia. Po co zapisujesz znak 0xFE? Również nie mamy pojęcia. Możesz wysłać cokolwiek i odczytać cokolwiek. Musisz wiedzieć z czym masz do czynienia zanim zaczniesz z tym pracować, czyli musisz znać jakąś specyfikację przesyłanych i odczytywanych danych.


Do czynienia mam z takimi danymi jak: obecna ilość graczy na serwerze, maksymalna ilość graczy, ping, krótki opis serwera i ewentualnie obrazek serwera (czyli wszystkie informacje wyświetlane w oknie gry).

Oraz mam kolejne pytanie - czy korzystając z tej strony http://wiki.vg/Protocol jest możliwość ustalenia na stronie ile dany gracz na serwerze ma punktów życia?
Crozin
1. Do czynienia masz z jakimś ciągiem/strumieniem bajtów, które zinterpretujesz sobie w jakiś nam bliżej nieznany sposób.
2. Być może jest tutaj ktoś, kto zna protokół Micecreafta, ja jedną z takich osób nie jestem. Musisz przejrzeć jego specyfikację i spróbować odczytać te dane. Format danych jest ustalony już przez specyfikację.
Dominator
A i ostatnie pytanie - gdzie mogę przejrzeć tą specyfikację/format danych? Nigdzie na forach nie ma żadnych danych...
Crozin
A skąd mamy widzieć? Masz jakiś socket - nie wiemy czego, po co, jak, dlaczego, od kogo on pochodzi, jaki jest protokół komunikacji, co serwuje, jak serwuj, jednym słowem nic o nim nie wiemy. Podesłałeś jakąś specyfikację (http://wiki.vg/Protocol) to zapewne z takim czymś się łączysz. Przejrzyj ją. To nie to? To skąd my mielibyśmy wiedzieć czego i skąd chcesz?
Dominator
Dobra dobra już ogarnąłem całość, dzięki za wytłumaczenie biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.