Autor | Zpráva | ||
---|---|---|---|
Haca Profil * |
#1 · Zasláno: 31. 10. 2009, 10:32:07
Zdravím, snažím se zpatlat skript co by vracel status serveru. Jedná se o hru Wolf ET. Když jsem nepoužil udp:// tak skript nefungoval vůbec a vypršel timeout a navíc sem apk dohledal že je tam to udp nutné. Teď to vrací číslo 17 a když status nahradím slovem players tak 18. Vůbec nechápu co to má znamenat, mělo by se vrátit asi toto:
map: goldrush num score ping name lastmsg address qport rate --- ----- ---- --------------- ------- --------------------- ----- ----- Skript: <? $sock = fsockopen("udp://localhost","27960"); $status = fwrite($sock,"/rcon test status"); echo $status; fclose($sock); ?> |
||
Enyeus Profil |
#2 · Zasláno: 31. 10. 2009, 10:37:44
/rcon test status má 17 znaků.
|
||
Mike8748_ Profil * |
#3 · Zasláno: 31. 10. 2009, 10:40:37
no pripojis se na server, pres fwrite mu posles prikaz, ale uz jaksi nenacitas nejakou odpoved, misto toho vypisujes pocet bajtu ktery si tam odeslal
takze pred echo $status; skus jeste nejaky fread($sock,$status,8192); nebo tak neco. musis provest operaci cteni, aby si ziskal tvoji pozadovanou textovou odpoved |
||
Haca Profil * |
#4 · Zasláno: 31. 10. 2009, 10:42:21
aha teď na to koukám a je to pěkná blbost :]
jak bych to tedy měl udělat? předpokládám poslat /rcon test status a pak fgets()? |
||
AM_ Profil |
#5 · Zasláno: 31. 10. 2009, 10:44:05
analogická funkce k fwrite() je fread(), ale fgets() by mohlo taky fungovat. Nejlepší máš to zkusit :)
|
||
Haca Profil * |
#6 · Zasláno: 31. 10. 2009, 10:47:28
já to tu nějak zkouším ale nemůžu si s tím poradit :(
<? $sock = fsockopen("udp://localhost","27960"); $send = fwrite($sock,"/rcon test players"); $status = fread($sock,$send); echo $status; fclose($sock); ?> |
||
Haca Profil * |
#7 · Zasláno: 31. 10. 2009, 10:48:09
to vrací ...disconnect nebo tak něco
|
||
Haca Profil * |
#8 · Zasláno: 31. 10. 2009, 11:44:24
<? $sock = fsockopen("udp://77.93.200.115","28000"); $send = fwrite($sock,"/rcon heslo status"); $status = fputs($sock,$send); fclose($sock); echo $status; ?> Vrací 2. |
||
Mike8748 Profil |
#9 · Zasláno: 31. 10. 2009, 13:36:03
kdyz uz, tak fgets, potrebujes cist, ne zapisovat(coz puts dela)
takze $status=fgets($sock); |
||
AM_ Profil |
#10 · Zasláno: 31. 10. 2009, 13:55:32
trochu nechápu, proč té funkci fread() vnucuješ jako parametr $send - počet odeslaných bytů předchozím fwrite. jako horní hranici čtení bych dal nějaké vysoké číslo, nebo můžeš číst např. byte po bytu a čekat na konec řádku.
Pokud ti to ale vrací disconnected, máš asi stejně někde chybu, řekl bych, že příkaz musí končit odřádkováním: $send = fwrite($sock,"/rcon heslo status\n"); |
||
Časová prodleva: 26 dní
|
|||
mezon Profil * |
#11 · Zasláno: 26. 11. 2009, 19:35:46
Hele dám ti radu:
Nepoužívej udp.Nevím proč ale udp vždy odpoví kladně ať se děje cokoliv.Takže tu IP piš bez protokolu. A ověř si (když už použováš rcon) jestli je ten port co používáš určen pro rcon. Já jsem se snažil udělat si Battlefield 2 server status. Udp odpověděl kladně pokaždé.Nezávisle na stavu serveru. Tak jsem se na udp vykašlal.Zadal jsem ip a serverový port --> Connection timed out. Tak jsem zadal query port a výsledek byl stejný. Tak jsem nakonec zadal rcon port a bingo!!! Funguje to. Už mám fajn online/offline ukazatel. |
||
Časová prodleva: 14 let
|
0