Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odczytywanie (?) socketu
Dominator
post 14.05.2015, 16:05:35
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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);


Ten post edytował Dominator 14.05.2015, 16:08:40
Go to the top of the page
+Quote Post
Crozin
post 14.05.2015, 16:19:01
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Dokumentacja: http://php.net/manual/en/regexp.reference.escape.php
Go to the top of the page
+Quote Post
Dominator
post 14.05.2015, 16:43:36
Post #3





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
Crozin
post 14.05.2015, 16:49:54
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Dominator
post 14.05.2015, 16:57:08
Post #5





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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"); ?
Go to the top of the page
+Quote Post
Crozin
post 14.05.2015, 17:20:04
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Ż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.
Go to the top of the page
+Quote Post
Dominator
post 14.05.2015, 17:23:43
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


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?
Go to the top of the page
+Quote Post
Crozin
post 14.05.2015, 17:53:57
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
Dominator
post 14.05.2015, 18:01:33
Post #9





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


A i ostatnie pytanie - gdzie mogę przejrzeć tą specyfikację/format danych? Nigdzie na forach nie ma żadnych danych...

Ten post edytował Dominator 14.05.2015, 18:01:50
Go to the top of the page
+Quote Post
Crozin
post 14.05.2015, 18:08:10
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Dominator
post 14.05.2015, 18:15:20
Post #11





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Dobra dobra już ogarnąłem całość, dzięki za wytłumaczenie biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 13:49