Buscar

DADist_Tema_07_Texto de apoio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CURSO DE CIÊNCIA DA COMPUTAÇÃO 
DISCIPLINA: DESENVOLVIMENTO DE APLICAÇÕES DISTRIBUÍDAS 
TEMA 07 – SOCKETS 
 
TEXTO PARA APOIO AO ESTUDO 
 
1) Introdução 
Inicialmente, poderíamos nos perguntar o que são sockets? Qual é o papel deles em 
sistemas distribuídos? Quais protocolos são utilizados? Java tem alguma funcionalidade relativa 
a sockets? O que deve ser considerado quando se trocam mensagens de dados entre nós em 
um sistema? 
 Java tem recursos que suportam a comunicação por rede. Sockets podem ser 
estabelecidos entre agentes e os protocolos de comunicações de dados podem ser 
estabelecidos por camadas no topo da conexão do socket. O pacote java.io contém várias 
classes que podem lidar com os fluxos de entrada e saída de dados. 
Os recursos de Java que suportam a comunicação por redes fornecem funcionalidades 
de alto nível como, por exemplo, a possibilidade de se trabalhar com objetos distribuídos, 
conexões remotas a servidores, entre outros. 
 Os sockets possibilitam a troca de dados entre nós em uma rede por meio de protocolos 
IP, UDP e TCP. 
 Java, assim como outras linguagens, tem funcionalidades prontas para facilitar o 
trabalho com sockets na comunicação entre os nós em uma rede. 
 A Figura 1 ilustra o processo de comunicação entre diferentes clientes que acessam um 
mesmo servidor. 
 
Figura 1 – Ilustração da comunicação entre clientes e servidor. 
 
 Considera-se que a comunicação seja realizada via TCP/IP ou UDP/IP. Vamos detalhar 
um pouco mais os papéis da camada de “Internet” e da camada de Transporte. 
 
Camada de “Internet”: 
• Identifica a interface de rede de um host: endereço IP (v4,, v6); 
• Há muitos computadores na internet; 
• Cada host pode ter mais de um adaptador de rede, cada um deles com um endereço IP 
diferente como, por exemplo, roteadores. 
Camada de Transporte: 
• Para cada adaptador de rede, são definidos os protocolos da camada de transporte; 
• Cada protocolo pode ser usado por múltiplos processos para cada adaptador de rede. 
 
Um socket identifica um canal de comunicação usado por um processo, usando um 
protocolo da camada de transporte para comunicar por meio de um adaptador de rede. 
• Para os clientes: sockets podem ser identificados pela combinação dos itens: 
o Endereço IP (Camada de “Internet”); 
o Nome do protocolo da camada de Transporte (exemplo: TCP ou UDP); 
o Porta da camada de Transporte (0 ... 65535). 
 
Outro item importante na comunicação por rede é o DNS (Domain Name System) que 
converte os nomes textuais em endereços de IP como, por exemplo: www.xpto.com.br para 
191.165.120.74. 
Os sockets são recursos exclusivos em toda a rede e que são pertencentes aos processos. 
Há a divisão entre os sockets dos clientes e os sockets dos servidores. Os sockets dos servidores 
aceitam conexões de entrada de clientes ou dados. E os sockets dos clientes iniciam a 
comunicação com um servidor. 
 
2) Sockets TCP 
 O TCP é um protocolo orientado a conexão e os sockets dos servidores esperam por 
requisições (requests) de conexão de entrada. Os sockets dos clientes, por sua vez, tentam 
estabelecer uma conexão. Vamos avaliar alguns detalhes sobre os sockets dos clientes e 
servidores 
• Sockets dos servidores: 
o Estão ligados a uma porta específica que, normalmente, é conhecida; 
o “Escuta” a referida porta a espera das requisições dos clientes; 
o Criam um novo socket para cada cliente aceito; 
o Este novo socket se comunica com o referido cliente; 
o Fecha o socket do servidor. 
http://www.xpto.com.br/
• Sockets dos clientes: 
o Estão ligados à portas randômicas, ou seja, não tem um valor específico; 
o Se conectam a um socket de servidor; 
o Se comunicam por meio do envio e recebimento de dados; 
o Fecha o socket. 
Em Java, o uso dos sockets TCP/IP é mais facilitado. O socket do servidor que aceita 
conexões é uma instância da classe ServerSocket: 
• No seu construtor, é passado o valor da porta; 
• O método accept realiza a espera por conexões, que são retornadas como socket de 
cliente. 
E o cliente é uma instância da classe Socket: 
• Pode ser conectado a um servidor pela passagem do endereço do servidor 
(InetAddress) e pela porta no construtor; 
• Para a comunicação, cada socket cliente tem: 
o Um InputStream para a leitura dos dados recebidos por meio do 
getInputStream, por exemplo; 
o Um OutputStream para o envio de dados por meio do 
getOutputStream, por exemplo; 
o As leituras são bloqueadas, enquanto as escritas não são bloqueadas. 
 
Os sockets são fechados por meio do método close. Todos os itens envolvidos na 
comunicação podem causar erros e, portanto, é importante trabalhar com o tratamento de 
exceções (IOException). 
A Figura 2 ilustra o processo de comunicação envolvendo os sockets de cliente e 
servidor, assim como os métodos utilizados neste processo. 
 
Figura 2 – Ilustração do processo de comunicação por meio de sockets entre cliente e servidor. 
 
 Sockets orientados a conexão oferecem envio e recebimento sequencial dos dados. Para 
a entrada e saída sequencial de bytes, Java tem uma API com funcionalidades de leitura e escrita 
de um fluxo de bytes: 
• OutputStream: escreve bytes sequencialmente; 
• InputStream: lê bytes sequencialmente. 
Socket oferece getInputStream() e getOutputStream() para para a leitura e escrita de 
fluxos de dados, conforme ilustra a Figura 3: 
 
Figura 3 – Ilustração da escrita e leitura de um fluxo de bytes. 
 
3) Sockets UDP 
 UDP é um protocolo não-confiável e sem conexão, ou seja, os sockets dos servidores 
esperam por pacotes de entrada que podem vir de qualquer lugar ao invés do estabelecimento 
de conexões. 
 Os clientes tentam enviar os pacotes para o servidor sem estabelecer conexões. 
Algumas características básicas dos sockets dos servidores e clientes serão descritas a seguir. 
• Socket do servidor: 
o Está ligado a uma porta específica e que, usualmente, é conhecida; 
o Aceitam pacotes dos clientes; 
o Processam os pacotes de dados que chegam; 
o Podem, eventualmente, também enviar pacotes; 
o Fecha o socket do servidor quando termina a comunicação. 
• Socket do cliente: 
o Está ligado a portas randômicas, ou seja, os valores das portas podem variar 
aleatoriamente; 
o Envia pacotes ao servidor; 
o Podem, eventualmente, receber pacotes do servidor; 
o Fecha o socket.

Continue navegando