Escolar Documentos
Profissional Documentos
Cultura Documentos
Soquetes PDF
Soquetes PDF
1. Introduo
A comunicao entre processos de software tornou-se indispensvel nos sistemas atuais. O mecanismo
mais utilizado atualmente para possibilitar comunicao entre aplicaes chamado socket. Neste artigo
ser apresentado o suporte que Java oferece para a utilizao desse mecanismo de comunicao.
Java oferece os seguintes modos de utilizao de sockets: o modo orientado a conexo, que funciona
sobre o protocolo TCP (Transmission Control Protocol, ou protocolo de controle de transmisso), e o modo
orientado a datagrama, que funciona sobre o protocolo UDP (User Datagram Protocol, ou protocolo de
datagrama de usurios). Os dois modos funcionam sobre o protocolo IP (Internet Protocol).
Cada um desses modos tem sua aplicabilidade, e possuem vantagens e desvantagens em sua utilizao.
Modo orientado a conexo TCP/IP
Servios no confiveis:
Servios confiveis:
o Mensagens podem ser perdidas;
o Sem perdas de dados na rede;
o Ordem das mensagens no garantida;
o Garantia de ordem dos pacotes;
Possibilidade de utilizao de fluxo de dados Cada mensagem um datagrama:
[sender (remetente), receiver (receptor), contents
(DataStreams);
(contedo da mensagem)]
Vantagem:
Desvantagens:
muito mais rpido que o modo orientado
mais lento que o modo orientado a
a conexo;
datagrama;
Comportamento servidor diferente de
comportamento cliente;
2. Sockets TCP/IP
O processo de comunicao no modo orientado conexo ocorre da seguinte forma: O servidor
escolhe uma determinada porta (o termo correto seria porto, em ingls port, mas aqui no Brasil o termo
utilizado comumente porta) e fica aguardando conexes nesta porta. O cliente deve saber previamente
qual a mquina servidora (host) e a porta que o servidor est aguardando conexes. Ento o cliente solicita
uma conexo em um host/porta, conforme demonstrado na figura 1.
Figura 1
Se nenhum problema ocorrer, o servidor aceita a conexo gerando um socket em uma porta qualquer
do lado servidor, criando assim um canal de comunicao entre o cliente e o servidor. A figura 2 demonstra
este canal de comunicao.
Figura 2
Tipicamente o comportamento do servidor ficar em um loop aguardando novas conexes e gerando
sockets para atender as solicitaes de clientes.
A seguir sero apresentadas as aes necessrias para implementar comunicao sobre TCP atravs de
um socket cliente e um socket servidor:
2.1.
Passo 2 - Obter fluxos (streams) de entrada e sada para comunicao com o servidor:
2.2.
Passo 3 - Obter fluxos (streams) de entrada e sada para comunicao com o cliente:
//Fechando o servidor.
serverSocket.close();
3. Sockets UDP/IP
Sockets UDP/IP so muito mais rpidos que sockets TCP/IP. So mais simples, porm menos
confiveis. Em UDP no temos o estabelecimento de conexo, sendo que a comunicao ocorre apenas
com o envio de mensagens.
Uma mensagem um datagrama, que composto de um remetente (sender), um destinatrio ou
receptor (receiver), e a mensagem (content). Em UDP, caso o destinatrio no esteja aguardando uma
mensagem, ela perdida. A figura 3 apresenta o envio de um datagrama de uma suposta mquina (Maq1)
para outra (Maq2) em uma rede.
Figura 3
A seguir sero apresentadas as aes necessrias para implementar comunicao utilizando sockets
UDP:
3.1.
InetAddress addr=InetAddress.getByName(www.javasoft.com);
String toSend =PERGUNTA;
byte[] buffer = toSend.getBytes();
//Enviar datagrama para destinatrio na porta 4545.
DatagramPacket question = new DatagramPacket(buffer, buffer.length, addr, 4545);
//Envia o datagrama.
clientSocket.send(question);
//Fechando o socket.
clientSocket.close();
3.2.
Recebendo mensagens:
String toSend=RESPOSTA;
byte[] buffer = toSend.getBytes();
DatagramPacket answer = new DatagramPacket (buffer, buffer.length,
question.getAddress()/*sender info*/, question.getPort()/*sender info*/);
serverSocket.send(answer);
//Fechando o servidor.
serverSocket.close();
3.3.
Multicast
O protocolo UDP suporta o envio de uma mensagem para um grupo de destinatrios ao invs de um
nico destinatrio. Isto denominado multicast. Um grupo multicast especificado por um endereo IP de
classe D (224.0.0.1 at 239.255.255.255, inclusive) e uma porta UDP. Classes IP definem ranges de
endereos. O endereo 224.0.0.0 reservado e no deve ser utilizado. Em Java o suporte a multicast
oferecido atravs da classe java.net.MulticastSocket.
A seguir temos as aes necessrias para a utilizao de multicast com sockets UDP.
InetAddress group = InetAddress.getByName("228.5.6.7");
MulticastSocket s = new MulticastSocket(6789);
// Entra no grupo. A partir deste momento as mensagens
//para 228.5.6.7 serao recebidas em s.
s.joinGroup(group);
// Envia e recebe mensagens UDP conforme apresentado anteriormente...
// Retira-se do grupo. Mensagens para 228.5.6.7
//no mais chegaro at o socket s.
s.leaveGroup(group);
5. Concluso
Este artigo apresentou as principais formas de networking oferecidas por Java, porm o suporte a
networking oferecido por Java mais abrangente. Existem algumas configuraes que podem ser realizadas
na utilizao de IP, como a configurao de timeouts (tempo de espera mximo para realizao de
operaes), buffers (tamanho do buffer dos pacotes), keep alive (mensagem automtica para verificao de
disponibilidade dos pares em uma conexo quando a conexo no est em utilizao), alm de outras
configuraes. Estas configuraes podem ser verificadas na interface java.net.SocketOptions.
Para os entusiastas em networking, temos algumas outras funcionalidades do J2SE 1.4 que no
mencionamos, porm so muito interessantes. Entre elas podemos destacar o suporte IPv6, suporte
operaes assncronas, suporte Secure Socket Layer (permite socket seguro), alm de outras novidades.
Maiores detalhes podem ser encontrados em:
http://java.sun.com/j2se/1.4.2/docs/guide/net/enhancements14.html
java.io.IOException;
java.net.InetSocketAddress;
java.nio.charset.Charset;
java.nio.ByteBuffer;
java.nio.channels.SocketChannel;
Autor:
Leonardo R. Nunes - leonardo@sumersoft.com - Formado em Cincia da Computao pela PUCPR,
mestrando em Sistemas Distribudos na PUCPR, trabalha com desenvolvimento de software orientado a
objetos utilizando Java desde 1997. Desenvolveu aplicaes Java para a rea de telefonia, rea industrial e
de telecomunicaes. Atualmente Diretor da Sumersoft Tecnologia (http://www.sumersoft.com) e
Coordenador do PRoJAVA (http://www.projava.com.br).