PDA

Просмотр полной версии : Нужно установить keep-alive соединение


Mixon
14.03.2010, 09:08
Дело обстоит так,есть одна не плохая он-лайн игрушка,а именно http://vkontakte.ru/app1641757
Так вот,при входе она соединяется с сервером 188.93.18.202:4321 (сервер:порт)
Мне нужно установить такое соединение с данным сервером средствами php,с возможностью отправки запросов на данный сервер.
Пробовал уже через сокс,сокс5,ничего,от сервера просто нет ответа...

Gifts
14.03.2010, 13:15
Mixon fsockopen/socket_create и прочитайте целиком RFC2068, ну или хотя бы раздел keep-alive header

Mixon
14.03.2010, 14:50
Gifts, если вы прочтёте внимательнее что я выше написал,то вы увидите,что я уже пробовал и fsockopen и socket_create,результата не дало!
По этому и обратился за помощью суда.

Gifts
14.03.2010, 15:14
Mixon Вы написали XYZню. Много разных слов, которые не образуют общей картины. Весь текст, это ваша просьба написать панацею к вашей проблеме и в конце маленькая приписка: "Пробовал уже через сокс,сокс5" - во первых, это понимается как прокси сервера, какое отношение к keep-alive? Правильно, никакого. Во-вторых, скорее всего (об этом чуть далее), даже если вы ставите Connection: keep-alive, вы не ставите заголовок с таймаутом и вас отфутболивает автоматом, или заголовков не шлете нужных. В-третьих, я говорю "скорее всего", потому что ни примера кода, ни конструктивного текста с "попытками" в вашем посте нет, только полное непонимание

Mixon
14.03.2010, 16:30
Gifts такс,тут если бы сервер отфутболивал (давал ошибку или просто обрывал соединение) то было бы по понятнее,но он просто никакого ответа не дает,абсолютно...Аналог того,когда тебя банят по IP,просто висиш,и страница не грузиться.
Вот пару примеров что я пробовал...

$fp = fsockopen ("tcp://188.93.18.202", 4321, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
// fputs ($fp, "GET / HTTP/1.0\r\nHost: 188.93.18.202\r\n\r\n");
while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}


тут место tcp прописывал все поддерживавшийся протоколы...

$fp = fsockopen("188.93.18.202", 4321, $errno, $errstr, 30);

$out="GET /index.php HTTP/1.1\r\n";

fwrite ($fp, $out);

echo fgets($fp,5000);

fclose($fp);

<?php
$sh = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sh, '188.93.18.202', '4321');
$headers = "GET / HTTP/1.0\r\n";
$headers .= "Host: 188.93.18.202\r\n";
$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 MRA 5.3 (build 02557) Firefox/3.0.6\r\n";
$headers .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$headers .= "Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n";
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
$headers .= "\r\n";
socket_write($sh, $headers, strlen($headers));
$result = '';
while ($r = socket_read($sh, 1024)) $result .= $r;
echo $result;
?>

Gifts
14.03.2010, 19:00
Mixon На этом порту не HTTP протокол, вы бы хоть Wireshark'ом пользовались.

Протокол XML, каждый пакет завершается нулл-байтом.

$f = fsockopen('tcp://188.93.18.202',4321) or die('cant connect');
fwrite($f, "<policy-file-request/>\x00");
$str = fread($f,4096);

while (substr($str, -1)!=="\x00") $str.=fread($f,4096);

echo $str;

Mixon
14.03.2010, 22:33
Gifts,спс огромное!
Вирешарком я сниффил,но я мало знаюсь в сетевых передачах,по этому я мало что там понял,и как это реализовать...=((