Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
#1 · Zasláno: 24. 9. 2011, 21:12:13
Zdravím vás.
Prosím mohl by mi někdo poradit jak zjistím ping herního serveru? Konkrétně pro hru GTA SA-MP. Zkoušel jsem funkci exec() i system() podle návodů na netu, ale ani jedno mi neukáže ping serveru... Díky za pomoc. |
||
o_O Profil |
#2 · Zasláno: 25. 9. 2011, 00:09:50
TomasJ:
Ping je závislý na dotazujícím - přesněji - pro každého uživatele v internetu může být PING jiný. Možná by se to dalo zjistit přes fsockopen. |
||
TomasJ Profil |
#3 · Zasláno: 25. 9. 2011, 00:32:45 · Upravil/a: TomasJ
o_O:
Jo tím to jde ale je to asi na 80 řádků a jsem si jistý, že existuje kratší verze (max. 10 řádků). |
||
o_O Profil |
#4 · Zasláno: 25. 9. 2011, 01:14:25 · Upravil/a: o_O
TomasJ:
80 řádků? Já to vidím maximálně na 5 i s výpisem - Mohl by jste dodat nějakou funkční zkušební adresu? |
||
TomasJ Profil |
#5 · Zasláno: 25. 9. 2011, 16:57:49 · Upravil/a: TomasJ
Ano, mohl: 88.212.10.137 (samp.k3s4.sk)
|
||
DoubleThink Profil * |
#6 · Zasláno: 25. 9. 2011, 17:45:29 · Upravil/a: DoubleThink
$time = microtime(true); $fp = fsockopen('tcp://88.212.10.137', 1234); if ($fp) { echo microtime(true) - $time; fclose($fp); } |
||
TomasJ Profil |
#7 · Zasláno: 25. 9. 2011, 19:05:24 · Upravil/a: TomasJ
DoubleThink:
Hmm... Warning: fsockopen(): unable to connect to tcp://88.212.10.137:7777 (Connection refused) Překládát to nemusíš. |
||
o_O Profil |
#8 · Zasláno: 25. 9. 2011, 19:12:28 · Upravil/a: o_O
TomasJ:
$time = microtime(true); if ($fp=@fsockopen('tcp://88.212.10.137', 1234,$errno,$errstr,30)) { echo microtime(true) - $time; fclose($fp); }else echo 'Nepodařilo se připojit k serveru - '.$errno.':'.$errstr; Ale jinak by to šlo ještě přes další funkce, které čekají na odezvu od serveru. Například cURL, ... |
||
DoubleThink Profil * |
#9 · Zasláno: 25. 9. 2011, 19:49:04
o_O:
Tady si akorát TomasJ vypíše tu chybu svépomocí, jinak je to totéž. TomasJ: „Překládát to nemusíš.“ Tak o čem je ještě řeč? Zařiď se podle toho. |
||
TomasJ Profil |
#10 · Zasláno: 25. 9. 2011, 21:05:12 · Upravil/a: TomasJ
Prostě se nedá připojit, jak se mám zařídít? Dal jsem port 80 a to samé.
|
||
DoubleThink Profil * |
#11 · Zasláno: 25. 9. 2011, 22:17:51
TomasJ:
Je to herní server, teoreticky by mohl přijímat jen UDP spojení. Vyzkoušej. „Dal jsem port 80 a to samé.“ V takovém případě je chyba na tvé straně, 88.212.10.137 na portu 80 očividně naslouchá. |
||
Davex Profil |
#12 · Zasláno: 27. 9. 2011, 20:30:08
Možná by pomohlo přečíst si manuál ;-). Po UDP musíš zkusit poslat nějaká data a čekat na odpověď.
|
||
TomasJ Profil |
#13 · Zasláno: 27. 9. 2011, 20:47:53
Davex:
Posílám... Jestli chceš celý kód, dobrá, tu je: function IMGECHO($img, $w, $a, $x, $y, $color, $text) { return imagettftext($img, $w, $a, $x, $y, $color, "serverfiles/Arial.ttf", $text); } $ip = '88.212.10.137'; $port = '7777'; $Online = false; $fp = fsockopen('udp://'.$ip, $port, $errno, $errstr, 10); if($fp) { $Online = true; $packet = 'SAMP'; $packet .= chr(strtok($ip, '.')); $packet .= chr(strtok('.')); $packet .= chr(strtok('.')); $packet .= chr(strtok('.')); $packet .= chr($port & 0xFF); $packet .= chr($port >> 8 & 0xFF); fwrite($fp, $packet.'i'); fread($fp, 11); $password = ord(fread($fp, 1)); $plr_count = ord(fread($fp, 2)); $max_plrs = ord(fread($fp, 2)); $strlen = ord(fread($fp, 4)); $hostname = fread($fp, $strlen); $strlen = ord(fread($fp, 4)); $gamemode = fread($fp, $strlen); $strlen = ord(fread($fp, 4)); $mapname = fread($fp, $strlen); $players = "$plr_count / $max_plrs"; fwrite($fp, $packet.'r'); fread($fp, 12); $rule_v = ""; $rule_n = ""; $weburl = ""; for($i=0;$i<6;$i++) { $strlen = ord(fread($fp, 1)); if($strlen) { $rule_n = fread($fp, $strlen); $strlen = ord(fread($fp, 1)); $rule_v = fread($fp, $strlen); if($i==5) $weburl=$rule_v; } } fclose($fp); } $img = imagecreatefromjpeg('images/banner.jpg'); $o = imagecolorallocate($img, 240, 200, 50); $g = imagecolorallocate($img, 15, 255, 15); $dr = imagecolorallocate($img, 177, 38, 17); $b = imagecolorallocate($img, 160, 240, 255); $r = imagecolorallocate($img, 255, 50, 50); if($Online) { IMGECHO($img, 10, 0, 4, 15, $o,"$hostname $gamemode"); //IMGECHO($img, 0, 4, 27, $o,"$gamemode"); IMGECHO($img, 10, 0, 4, 33, $b,"Players: $players"); if($password) IMGECHO($img, 26, 10, 177, 66, $r, "Locked"); //else IMGECHO($img, 16, 10, 188, 64, $g, "Unlocked"); IMGECHO($img, 10, -50, 309, 32, $g, "Online"); IMGECHO($img, 10, 0, 4, 107, $g, "$ip:$port"); IMGECHO($img, 10, 0, 271, 104, $o, $weburl); } else { IMGECHO($img, 18, 0, 144, 20, $r, "$ip:$port"); IMGECHO($img, 18, 0, 260, 44, $r, "Offline"); } Header("Content-Type: image/png"); imagepng($img); imagedestroy($img); Jak říkám, vše funguje když je server zaplý, ale jak ho vypnu, tak se ta stránka pořád načítá... |
||
Davex Profil |
#14 · Zasláno: 27. 9. 2011, 21:02:02 · Upravil/a: Davex
Co znamená "tak se ta stránka pořád načítá", když skript vygeneruje obrázek?
Asi bys měl po prvním fwrite() a fread() ověřit, že čtení neskončilo chybou a nějaká data opravdu přišla nebo nastavit kratší timeout pomocí socket_set_timeout() .
|
||
TomasJ Profil |
#15 · Zasláno: 27. 9. 2011, 22:17:43 · Upravil/a: TomasJ
Ty mě nechápeš... VŠE JDE, ale když je server offline, nejde se k němu připojit. Když je online, vše funguje, žádná chyba není.
Když se k němu nejde připojit, neustále mi prohlížeč píše "Připojování..." V kódu by pod podmínkou if($fp) chyba být neměla. |
||
Davex Profil |
#16 · Zasláno: 27. 9. 2011, 22:32:11
TomasJ:
„Když se k němu nejde připojit, neustále mi prohlížeč píše "Připojování...“ Předpokládám že proto, protože se příliš dlouho čeká na příjem odpovědi (první fread() ), která od vypnutého serveru nepříchází - musí se zkrátit timeout.
|
||
TomasJ Profil |
#17 · Zasláno: 27. 9. 2011, 23:16:24 · Upravil/a: TomasJ
Počkej... Ono to přes vypnutý server projde přes podmínku if($fp) ? Já jsem si bláhově myslel, že to je podmínka "pokud je připojeno"...
No tak díky, toto jsem netušil. Tak už to funguje jak má, udělal jsem podmínku if(fwrite() && fread())... |
||
Časová prodleva: 13 let
|
0