|
Познающий
Регистрация: 29.02.2008
Сообщений: 45
Провел на форуме: 162965
Репутация:
6
|
|
Задание для ROA
Задание для ROA
PHP код:
<?
set_time_limit(0);
//функция для PHP-сокетов, после которой работа ведется аналогично fsockopen()
//в случае неудачи возвращает false, код ошибки($errno), описание ошибки($errstr)
//для работы требуются включенные сокеты
function socks4_open($server,$port,&$errno,&$errstr){
if(!($socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) || !socket_connect($socket,$server,$port)){
$errno=socket_last_error();
$errstr=socket_strerror($errno);
return false;
} else return $socket;
}
//функция для PHP-сокетов, возвращающая ответ на запрос($q) к серверу($server) через порт($port)
//в случае неудачи возвращает false, код ошибки($errno), описание ошибки($errstr)
//для работы требуются включенные сокеты
function socket_otvet($server,$port,$q,&$errno,&$errstr){
if(!($socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) || !socket_connect($socket,$server,$port)){
$errno=socket_last_error();
$errstr=socket_strerror($errno);
return false;
} else {
socket_write($socket,$q,strlen($q));
while($otvet=socket_read($socket,1024)){
$otv.=$otvet;
}
socket_close($socket);
return $otv;
}
}
//функция для fsockopen(), возвращающая ответ на запрос($q) к серверу($server) через порт($port)
//в случае неудачи возвращает false, код ошибки($errno), описание ошибки($errstr)
function fsock_otvet($server,$port,$q,&$errno,&$errstr){
if(!($fp=fsockopen($server,$port,$errno,$errstr,30))){
return false;
} else {
fputs($fp,$q);
while(!feof($fp)){
$otv.=fgets($fp,1024);
}
fclose($fp);
return $otv;
}
}
//пример запроса
$q="GET / HTTP/1.0\r\nHost: mail.ru\r\n\r\n";
//пример работы socks4_open()
$sock=socks4_open("mail.ru",80,$errno,$errstr);
if(!$sock){
echo "$errstr ($errno)<br>\n";
} else {
socket_write($sock,$q,strlen($q));
while($otvet=socket_read($sock,1024)){
$otv.=$otvet;
}
}
socket_close($sock);
echo $otv;
//пример работы socket_otvet()
if($otv=socket_otvet("mail.ru",80,$q,$errno,$errstr)) echo $otv; else echo "$errstr ($errno)<br>\n";
//пример работы fsock_otvet()
if($otv=fsock_otvet("mail.ru",80,$q,$errno,$errstr)) echo $otv; else echo "$errstr ($errno)<br>\n";
?>
|