05-05-2010, 15:44
Jak tu mi nikt nie pomoże, to już nie wiem kto może.
Mam na nazwie prosty skrypt pobierający dane o serwerze CS. Pewnego razu przestał działać, więc napisałem do supportu.
To ten skrypt:
I odpowiedź z nazwy:
Co to znaczy? W manualu PHP znalazłem tylko bindowanie dotyczące serwera z którym się łączy przez alias.
Co mam zrobić?
Próbowałem tak jak coś w manualu było:
array('bindto' => 'IP:0')) - w to miejsce wstawiałem swoje IP, ip serwera, ip routera, ale nic nie działa. Dalej timeout
Jak to coś pomoże...
Wynik:
Chciałem tylko pozwolić na pobieranie danych o serwerze CS (protokół UDP, port prawie zawsze 27015) wszystkim ludziom wchodzącym na moją stronkę. Nie znam ani IP wchodzących (znaczy, nie licząc $_SERVER['SERVER_ADDR']), ani ip serwerów do których chce się połączyć.
Musiałbym zmieniać coś po stronie serwera? Tzn. otwierać porty? Bo już nie rozumiem z której strony mam bindować i co mam bindować.
Mam na nazwie prosty skrypt pobierający dane o serwerze CS. Pewnego razu przestał działać, więc napisałem do supportu.
To ten skrypt:
Kod:
$ip = "194.109.69.51";
$fp = @fsockopen("udp://".$ip, 27015);
stream_set_timeout($fp, 10);
//stream_set_blocking($fp, 0);
fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$return = fread($fp, 100);
echo $return;
$data = stream_get_meta_data($fp);
print_r($data);
if($data['timed_out'])
{
die("Timed Out");
}
else
{
print_r($data);
}
I odpowiedź z nazwy:
Cytat:zanim wykonuje Pan w skryptach operacje zapisu/odczytu z gniazda sieciowego
proszę zbindować się na swój adres IP.
Co to znaczy? W manualu PHP znalazłem tylko bindowanie dotyczące serwera z którym się łączy przez alias.
Co mam zrobić?
Próbowałem tak jak coś w manualu było:
Kod:
$ip = "193.33.176.148";
$opts = array('socket' => array('bindto' => '85.128.153.53:0'));
$context = stream_context_create($opts);
$fp = @stream_socket_client("udp://".$ip.":27015", $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context);
stream_set_timeout($fp, 10);
//stream_set_blocking($fp, 0);
fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$return = fread($fp, 100);
echo $return;
$data = stream_get_meta_data($fp);
print_r($data);
if($data['timed_out'])
{
die("Timed Out");
}
else
{
print_r($data);
}
array('bindto' => 'IP:0')) - w to miejsce wstawiałem swoje IP, ip serwera, ip routera, ale nic nie działa. Dalej timeout
Jak to coś pomoże...
Wynik:
Kod:
Array ( [stream_type] => udp_socket [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => 1 [blocked] => 1 [eof] => ) Timed Out[code]
Chciałem tylko pozwolić na pobieranie danych o serwerze CS (protokół UDP, port prawie zawsze 27015) wszystkim ludziom wchodzącym na moją stronkę. Nie znam ani IP wchodzących (znaczy, nie licząc $_SERVER['SERVER_ADDR']), ani ip serwerów do których chce się połączyć.
Musiałbym zmieniać coś po stronie serwera? Tzn. otwierać porty? Bo już nie rozumiem z której strony mam bindować i co mam bindować.