Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak stworzyć z tego socket?
jakub.drag
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 9
Dołączył: 11.10.2010
Skąd: Kraków

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


Cześć.
Wchodzę w sockety i po dawce teorii, chcę stworzyć klienta który będzie się łączył z pewnym serwerem i wysyłał socketa opisanego w specyfikacji tego serwera smile.gif
  1. struktura pakiet_logowania
  2. {
  3. 32-bit Dlugosc;
  4. 16-bit IloscIntow = 1; // tylko ID pakietu
  5. 16-bit IloscStringow = 8; // tak, trochę tych danych bedzie ;-)
  6. 16-bit ID_Pakietu = 1400;
  7.  
  8. string Uzytkownik; // nazwa czatowicza
  9. string Haslo; // hasło do nicka
  10.  
  11. string UserCookie; // ten string jest PUSTY, nie widzialem aby COKOLWIEK go uzywalo (00 00 00)
  12.  
  13. string NazwaPokoju; // jest to pokój, do ktorego przejdziemy tuż po zalogowaniu
  14. string Referrer; // o tym poniżej
  15.  
  16. string AdresSerwera; // nie wiem po co to, ale musi być podany adres serwera z którym się łączymy
  17.  
  18. string Konfiguracja; // o tym też poniżej
  19.  
  20. string NazwaNaszegoProgramu; // nazwa klienta, którego używamy
  21. }


Specyfikacja jak widać napisana jest pseudokodem. Komunikacja odbywa się w postaci plain-text.
Czy ktoś mógł by mnie nakierować/pokazać jak w praktyce tworzyć takie sockety np. z takiego opisu? Żebym na następnych mógł się wprawiać bez błądzenia.
Z góry dzięki i pozdro smile.gif


--------------------
Podchodź pozytywnie do swojego kodu :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
redeemer
post
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Nie chcesz "wysyłać socketa" tylko pakiet przez socket. Piszesz, że komunikacja w plain-next, ale wklejasz "32-bit Dlugosc; 16-bit IloscIntow = 1;" (to raczej nie jest wysyłane jako plain-text tylko wartości binarne). Ponadto fsockopen lub stream_socket_client + pack i piszesz/czytasz jak do pliku. Możesz też użyć socket_create, socket_write, etc. tutaj przykłady: http://php.net/manual/en/sockets.examples.php. Dodatkowo jak patrze na strukture pakietu to albo brakuje bajtów opisujących długość stringów takich jak użytkownik, hasło itd. albo w pakiecie kończą się dodatkowym bajtem (prawdopodobnie 0x00) i w takim wypadku będziesz musiał go dodawać ręcznie podczas tworzenia pakietu (pamiętaj, że do pierwszego pola "Długość" też się będzie wliczać).


--------------------
Go to the top of the page
+Quote Post
jakub.drag
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 9
Dołączył: 11.10.2010
Skąd: Kraków

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


@redeemer dzięki! smile.gif
Musiałem jeszcze raz wczytać się głębiej w dokumentację protokołu po przeczytaniu Twojego posta i ruszyłem dalej, jednak tu pojawił się kolejny problem.
Cały myk ma polegać na tym by połączyć się z serwerem chata, zalogować i tyle. Sniffowałem pewien programik który wykonuje taką operację i odczytałem sobie poprawną treść pakietu logującego:

[00 00 00 88] - długość
[00 01] - ilość intów,
[00 08] - ilość stringów
05 78 00 0C 44 75 63 68 5F 48 ........ itd.

Pierwsza wartość ma być 32 bitowym intem, więc funkcją pack konwertuję to na big endian 32 bit natomiast druga i trzecia mają być spakowane w big endian 16bit. Do tego dochodzi specyficzna budowa stringów, na których początku ma być ich długość w BE 16 bit.
Wszystko fajnie, ale (problem zacząłem dostrzegać wcześniej, ale chciałem potwierdzić) jak wysyłam otrzymany ciąg przez fwrite/socket_write zostaje on automatycznie (ponownie z resztą) zamieniony na hexadecymalny i wychodzi z tego oczywiście bełkot, przez który nie dostaję odpowiedzi serwera:

30 30 20 30 30 20 30 30 20 38 38 20 30 30 20 30 .... itd

Jak wysłać poprawnie ten pakiet?

Ten post edytował jakub.drag 1.08.2015, 18:52:30


--------------------
Podchodź pozytywnie do swojego kodu :)
Go to the top of the page
+Quote Post
redeemer
post
Post #4





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Pokaż jakiś przykładowy kod jak to wysyłasz.


--------------------
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 Aktualny czas: 21.08.2025 - 12:58