Im Prinzip ist es ganz einfach (wenn man sich die Daten genau anschaut).
Dann fällt auf, dass jeder String mit einem
00 Byte abgeschlossen ist.
Wie ich denn darauf komme?
A2S_INFO- Header: byte
- Payload: string
Code:
FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 ÿÿÿÿTSource Engi
6E 65 20 51 75 65 72 79 00 ne
Query
Schauen wir uns das Datenpaket an, dann finden wir die ersten 4 Bytes mit
FF
, dann den Header mit
54
und der Rest ist der String ... öh, bis auf das letzte Byte
00
.
Nächstes Beispiel angesehen
Code:
FF FF FF FF 49 02 67 61 6D 65 32 78 73 2E 63 6F ÿÿÿÿI.game2xs.co
6D 20 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 m Counter-Strike
20 53 6F 75 72 63 65 20 23 31 00 64 65 5F 64 75 Source #1.de_du
73 74 00 63 73 74 72 69 6B 65 00 43 6F 75 6E 74 st.cstrike.Count
65 72 2D 53 74 72 69 6B 65 3A 20 53 6F 75 72 63 er-Strike: Sourc
65 00 F0 00 05 10 04 64 6C 00 00 31 2E 30 2E 30 e......dl..1.0.0
2E 32 32 00 .22.
Aha, da sind ja wieder diese
00
Bytes zwischen den einzelnen Strings. Sehr schön.
Um dieses jetzt vernünftig zu lösen, baut man sich eine Klasse, die aus einem Stream diese Daten-Formate auslesen kann (so wie im PHP-Skript).