Sexta-feira, 13 de dezembro de 2002 às 03h59

Introdução a Sockets

Fonte: Gleisson Assis 

É através de sockets que podemos estabelecer comunicações com servidores enviando e recebendo dados, e como de costume, precisamos enviar informações as quais o protocolo usado possa entender e efetuar suas ações. Nesta parte não entraremos muito a fundo. Mas ótimos tutorias podem ser encontrados em www.faqs.org.

Vamos elaborar um script que nos retorne o conteúdo de uma página (usando o protocolo HTTP) e o cabeçalho que o servidor nos envia.

Para começarmos precisamos criar um identificador com o qual faremos trabalhar as demais funções relacionadas, seria algo como iniciar uma conexão com um banco de dados qualquer ou iniciar algum trabalho com arquivos, criamos esse identificador com a função fsockopen. Exemplo:

<?
$sock 
fsockopen("localhost",80,$errorno,$error,30);
?>

Bom você deve ter percebido mas é bom comentar que na função fsockopen recebeu cinco parâmetros, sendo que apenas o dois primeiros seriam necessários, estudemo-los então:

  1. O servidor a ser estabelecida a conexão (ex. www.suapagina.com.br)
  2. A porta que será usada à conexão (normalmente em HTTP usa-se a porta 80)
  3. A variável que receberá o número do erro (se houver)
  4. Uma variável que receberá a descrição do erro (se houver)
  5. O tempo limite à espera da conexão (timeout)
Podemos usar as variáveis de erro da seguinte maneira:

<?
$sock 
fsockopen("localhost",8000,$errorno,$error,30);
if(!
$sock){
echo 
"Houve um erro: $error ($errorno)";
}
?>

Se você já sabe usar as funções relacionadas a arquivos ficará feliz em saber que os passos que seguirão serão efetuados da mesma maneira.
O envio de dados é realizado com funções de escrita em arquivos e a leitura da resposta do servidor é realizada com as funções de leitura. Nesse ponto do tutorial é bom você saber como fazer um requisição simples sob o protocolo HTTP. Como foi relatado no início do tutorial, essa parte não será estuda com detalhes, apenas superficialmente:

<?
$requisicao 
= "GET /arquivo.txt HTTP/1.0 ";
?>

Onde /arquivo.txt é o arquivo que você deseja do servidor, podendo ser apenas / o que resultará na página incial do site.
Após a elaboração da string de requisição devemos envia-la ao servidor. Podemos fazê-lo com as funções fwrite ou fputs. Usemos a função fwrite que me é comum:

<?
fwrite
($sock,$requisicao);
?>

Após enviar a requisição do arquivo o servidor enviará uma respota, que pode ser o arquivo requerido ou alguma mensagem de erro, podemos lê-la com algum função de leitura de arquivo, usemos a função fgets:

<?
$resultado 
fgets($sock,255);
while(!
feof($sock)){
$resultado .= fgets($sock,255);
}
?>

Se você mandasse imprimir a variável resultado veria algumas informação que não fazem parte do corpo do documento, esse é um outro ponto que devemos destacar, o servidor lhe enviára um cabeçalho (informação como cookies, data de expiração e etc...) e após um sequencia de strings que em PHP representaríamos como rnrn o corpo da página, então nesse casa para separarmos esses dados podemos fazer uso da função split - que tem como objetivo retornar um array separando uma string por um delimitador informado - exemplo:

<?
$partes 
split(" ",$resultado,2);
$header $partes[0];
$body $partes[1];
?>

Agora que já realizamos o que queríamos podemos (e devemos) liberar o identificador criado com a função fsockopen, procederemos da mesma maneira ao fecharmos um arquivo:

<?
fclose
($sock);
?>


O script completo pode ser escrito com as seguintes linhas de código:

<?
$sock 
fsockopen("localhost",80,$errorno,$error,30);
$requisicao "GET / HTTP/1.0 ";
fwrite($sock,$requisicao);
$resultado fgets( $sock,255);
while(!
feof($sock)){
$resultado .= fgets($sock,255);
}
$partes split(" ",$resultado,2);
$header  $partes[0];
$body $partes[1];
echo $header;
fclose
($sock);
?>

Nenhum comentário até agora

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.