Você está na página 1de 7

Escola Secundria de Algures

Curso Profissional de Tcnico de Gesto e Programao de Sistemas Informticos Ano Letivo 2014/15

[SOCKETS E A LINGUAGEM PHP]


Mdulo 6 Programao de Sistemas de Comunicao Alexandra Coroado

Programao de Sistemas de Comunicao

Criao de Sockets
socket_create (int domain, int type, int protocol)
1 Parmetro Domain AF_INET refere-se a protocolos baseados em IPv4 como TCP e UDP AF_INET6 refere-se a protocolos baseados em IPv6 normalmente TCP e UDP 2 Parmetro Type SOCK_STREAM para usar um tipo de comunicao baseada em TCP (orientado ligao) ou OCK_DGRAM para usar um tipo de comunicao baseada em UDP (no orientado ligao) 3 Parmetro Protocol SOL_TCP para usar TCP ou SOL_UDP para usar UDP

Exemplo:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

Associao de sockets
A associao entre um socket j criado e um IP + Porta conseguido atravs da seguinte instruo: socket_bind (resource $socket, string $address, int $port)
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Address Endereo IP da nossa mquina (servidor) 3 Parmetro Port Porta a associar ao socket (porta livre acima de 1024)

Exemplo:
$resultado=socket_bind ($sock_servidor, 192.168.0.2, 9000);

Esperar por clientes (TCP)


Um servidor necessita de esperar que algum cliente procure ligar-se a ele. Atravs da seguinte funo, possvel para um servidor estar constantemente 1

Redes de Comunicao Mdulo 6 Alexandra Coroado

Programao de Sistemas de Comunicao

a ouvir, esperando que algum se tente ligar a ele na porta escolhida que disponibilizou para o efeito. socket_listen (resource $socket, int $backlog)
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Backlog Nmero de clientes em fila de espera.

Exemplo:
$resultado=socket_listen ($sock_servidor, 1);

Aceitar clientes
A aceitao de clientes efetuada somente quando se trata de um socket em TCP. socket_accept (resource $socket)
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor)

Exemplo:
$sock_cliente=socket_accept($sock_servidor);

Estabelecimento de uma ligao (TCP)


Esta funo usada do lado do cliente para que se estabelea uma ligao entre este e o servidor. socket_connect (resource $socket, string $address, [int $port=0])
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Address Endereo IP do servidor que criou o socket 3 Parmetro Port Porta associada ao socket no servidor

Redes de Comunicao Mdulo 6 Alexandra Coroado

Programao de Sistemas de Comunicao

Exemplo:
$resultado=socket_connect ($sock_cliente, 192.168.0.2, 9000);

Envio e receo de informao via Socket (TCP)


Para realizar a receo de informao atravs de um socket em TCP utiliza-se a seguinte funo: socket_read (resource $socket, int $length, [int $type])
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Length Tamanho em bytes da mensagem a enviar 3 Parmetro Type Campo opcional mas que por defeito far a sua leitura em modo binrio. No mbito desta disciplina dever ser mudado para o modo normal de leitura. Assim, neste campo dever ser escrito PHP_NORMAL_READ. Neste caso a leitura ir parar sempre que encontrar \r ou \n.

Exemplo:
$msg=socket_read ($sock_cliente, 2048, PHP_NORMAL_READ);

Por outro lado, se pretendermos escrever no socket: socket_write (resource $socket, string $buffer, [int $length=0])
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Buffer Texto a enviar 3 Parmetro Length Campo opcional onde se poder fazer referncia ao nmero de bytes a escrever no socket.

Exemplo:
socket_write ($sock_cliente, $msg, strlen ($msg));

Redes de Comunicao Mdulo 6 Alexandra Coroado

Programao de Sistemas de Comunicao

Envio e receo de informao via Socket (UDP)


Para realizar a receo de informao atravs de um socket em UDP: socket_recvfrom (resource $socket, string &$buf, int $len, int $flags, string &$name, [int &$port])
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Buf Informao que estiver no socket ser enviada para esta varivel 3 Parmetro Len Tamanho da informao a ler do socket 4 Parmetro Flags O campo no relevante para a disciplina. Por defeito colocar 0. 5 Parmetro Name IP da estao (passada por varivel) da qual est a receber a informao 6 Parmetro Port Porta (passada por varivel) utilizada no socket

Exemplo:
Socket_recvfrom ($sock_cliente, $buffer, 2048, 0, $from, $port);

Por outro lado, se pretendermos escrever no socket: socket_sendto (resource $socket, string $buf, int $len, int $flags, string $addr, [int &$port])
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro Buf Informao a enviar para o socket 3 Parmetro Len Tamanho da informao a enviar para o socket 4 Parmetro Flags

Redes de Comunicao Mdulo 6 Alexandra Coroado

Programao de Sistemas de Comunicao O campo no relevante para a disciplina. Por defeito colocar 0. 5 Parmetro Addr IP remoto da estao para o qual se pretende enviar informao 6 Parmetro Port Porta remota da estao para a qual se pretende enviar informao.

Exemplo:
Socket_sendto ($sock_servidor, $buffer, strlen($buffer), 0, 192.168.0.1, 7000);

Destruio de um socket
Tanto do lado do cliente como do servidor necessrio no final da comunicao desligar-se o socket/destru-lo. socket_shutdown (resource $socket, [int $how=2])
1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor) 2 Parmetro How Valor inteiro entre 0 e 2 0 encerra a possibilidade de leitura no socket 1 encerra a possibilidade de escrita no socket 2 encerra a possibilidade de leitura e escrita no socket

Exemplo:
socket_shutdown ($sock_cliente, 2);

Posteriormente deve-se fechar definitivamente o Socket: socket_close (resource $socket)


1 Parmetro Socket Nome do socket criado em criao de sockets (socket servidor)

Exemplo: 5
socket_close ($sock_cliente); Redes de Comunicao Mdulo 6 Alexandra Coroado

Programao de Sistemas de Comunicao

Tratamento de Erros
O PhP disponibiliza funes prprias para o tratamento de erros relacionados com Sockets. socket_strerror (int $errno)
1 Parmetro Errno Varivel ou funo que ser para erro

Referncias
Srgio, Ricardo; Redes de Comunicao; Porto: Areal Editores http://php.net/manual/pt_BR/book.sockets.php (consultado em 24 de Outubro de 2011)

Redes de Comunicao Mdulo 6 Alexandra Coroado