Показать сообщение отдельно

Задание для ROA
  #2  
Старый 19.12.2008, 18:20
kik8888
Познающий
Регистрация: 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";
?>
 
Ответить с цитированием