Autor | Zpráva | ||
---|---|---|---|
Venk85 Profil * |
#1 · Zasláno: 7. 5. 2013, 22:01:41
Zdravím,
pracuji na projektu monitorování herních serverů, ale již delší dobu řeším problém. Potřebuji získat informace od serveru kde je například 800 hráčů, jenže do 8192 bajtů se vejde cca 350 hráčů a víc by jich mělo být v nějakém dalším packetu. Na netu jsem žádný podobný problém nenašel, ale informaci o dalším packetu jsem dostal přímo od hlavního vývojáře, takže to musí být nějak podobně. Zde je můj kód: public function __construct($ip, $port) { $fp=fsockopen("udp://".$ip, $port+123, $errno, $errstr); if (!$fp) { $this->info["online"] = 0; } else { stream_set_timeout($fp, 1); fwrite($fp, "s"); echo $data = fread($fp, 8192); fclose($fp); mtasa::serverProcess($data); } } |
||
ShiraNai7 Profil |
#2 · Zasláno: 7. 5. 2013, 22:43:57
A co když zkusíš:
echo $data = stream_get_contents($fp); |
||
Venk85 Profil * |
#3 · Zasláno: 7. 5. 2013, 22:50:04 · Upravil/a: Venk85
Stejné, zkoušel jsem i přes while spojovat data po menších částech a nic víc jsem nedostal.
Z dřívější komunikace s vývojářem si matně vzpomínám, že říkal něco o EOF, ale už nevím co. |
||
Majkl578 Profil |
#4 · Zasláno: 8. 5. 2013, 04:30:14
Venk85:
„Z dřívější komunikace s vývojářem si matně vzpomínám, že říkal něco o EOF, ale už nevím co.“ Co to tedy zkusit takhle: $data = ''; while (!feof($fp)) { $data .= fread($fp, 8192); } |
||
Jan Tvrdík Profil |
#5 · Zasláno: 8. 5. 2013, 04:46:00
Venk85:
Zkus použít PHP rozšíření socket. Viz např. stackoverflow.com/questions/9553516/send-and-receive-udp-from-web-page. Když uvedeš konkrétní IP adresu, tak budu pravděpodobně schopen ti to napsat celé nebo alespoň diagnostikovat, kde přesně je problém. |
||
Venk85 Profil * |
#6 · Zasláno: 8. 5. 2013, 08:03:28 · Upravil/a: Venk85
Majkl578: To jsem právě také zkoušel
Konkrétní IP je: 94.23.153.11:22003 ,ale momentálně má pouze 300 hráčů online (tak za hodinu by mělo být více) Port je vlastně 22126 (22003+123) |
||
Jan Tvrdík Profil |
#7 · Zasláno: 8. 5. 2013, 12:44:15
Venk85:
Zkus: $ip = '94.23.153.11'; $port = 22126; $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_connect($sock, $ip, $port); socket_write($sock, "s"); $data = socket_read($sock, 100000); socket_close($sock); |
||
Venk85 Profil * |
#8 · Zasláno: 8. 5. 2013, 16:54:32
Jan Tvrdík:
Paráda, zatím to vypadá, že to funguje. Díky moc |
||
Časová prodleva: 11 let
|
0