0% acharam este documento útil (0 voto)
2 visualizações34 páginas

Introdução a Sockets: TCP e UDP em Java

O documento aborda o conceito de sockets como uma abstração para comunicação entre processos, detalhando sua utilização em ambientes cliente/servidor. Ele compara os protocolos TCP e UDP, explicando suas características e diferenças, além de apresentar exemplos de implementação em Java. O texto também menciona sockets multicast e suas operações para gerenciamento de grupos.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
2 visualizações34 páginas

Introdução a Sockets: TCP e UDP em Java

O documento aborda o conceito de sockets como uma abstração para comunicação entre processos, detalhando sua utilização em ambientes cliente/servidor. Ele compara os protocolos TCP e UDP, explicando suas características e diferenças, além de apresentar exemplos de implementação em Java. O texto também menciona sockets multicast e suas operações para gerenciamento de grupos.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd

API’s para comunicação

SOCKETS
Com código melhorado e uso de
Threads!
O que são sockets?
São uma abstração para endereços de comunicação
através dos quais processos se comunicam;
Cada endereço desse tem um identificador único
composto pelo endereço da máquina e o identificador
local da porta usado pelo processo;
Este identificador de porta é usado para mapear dados
recebido pela máquina para processos (aplicações)
específicos.
Para que dois computadores possam manter
comunicação, cada um precisa de um socket.
O emprego de sockets está geralmente relacionado ao
paradigma cliente/servidor.
Sockets na Internet
 Endereçando serviços na Internet:
◦ Na Internet, todas as máquinas têm um endereço IP;
◦ Os serviços em uma máquina são identificados por uma
porta;
◦ Algumas serviços(portas) largamente conhecidos: echo(7),
ftp(21), daytime(13), http(80) e telnet(23).
O socket é criado no momento do binding, quando o
processo se associa a um par endereço e porta.
 Para se comunicar com um servidor, um cliente precisa
saber o endereço da máquina servidor e o número da
porta do serviço em questão. Ex: [Link]:80.
Sockets na Internet
Comunicação ponto a ponto:
◦ Orientado a conexão: TCP (Transport Control
Protocol);
◦ Sem conexão: UDP (User Datagram protocol).
Comunicação multiponto:
◦ Sem conexão: UDP sobre Multicast IP.
Sockets TCP vs UDP
 TCP - Orientado a conexão:
◦ A conexão deve ser estabelecida antes da transmissão dos
dados, connect e accept;
◦ A conexão deve ser encerrada após a transmissão dos dados;
◦ Em termos de qualidade de serviço da comunicação:
confiável e respeita ordem FIFO.
◦ Controle de Fluxo das Mensagens(Read e Write);
◦ Mas lento que o UDP;
 UDP - Sem conexão:
◦ O endereço destino é especificado em cada datagrama.
◦ Em termos de qualidade de serviço: não garante
confiabilidade e nem ordenação;
◦ Menos overhead na comunicação.
Sockets TCP vs UDP

Orientado a
Conexão (TCP)

Datagramas (UDP)
Usando Sockets em Java
Pacote [Link];
Principais classes:
◦ TCP: Socket e ServerSocket;
◦ UDP: DatagramPacket e DatagramSocket;
◦ Multicast: DatagramPacket e MulticastSocket.
Este pacote também contém classes que
fornecem suporte a manipulação de URLs e
acesso a serviços HTTP, entre outras coisas.
Sockets TCP
Clientes e servidores são diferentes.
◦ Servidor usa a classe ServerSocket para “escutar”
uma porta de rede da máquina a espera de
requisições de conexão.
ServerSocket ssock = new ServerSocket(12345,5);
◦ Clientes utilizam a classe Socket para requisitar
conexão a um servidor específico e então
transmitir dados.
Socket sock = new Socket(“[Link]”,12345);
A seguir explicaremos detalhadamente como
construir servidores e clientes em Java.
Servidor TCP
 Inicialmente,
um servidor deve criar um socket que
associe o processo a uma porta do host;
ServerSocket sSocket = new ServerSocket(porta,backlog);
porta: número da porta que o socket deve esperar
requisições;
backlog: tamanho máximo da fila de pedidos de conexão
que o sistema pode manter para este socket.
- O backlog permite que requisições sejam enfileiradas (em estado
de espera) enquanto o servidor está ocupado executando outras
tarefas.
- Se uma requisição de conexão chegar ao socket quando esta fila
estiver cheia, a conexão é negada.
Servidor TCP
Os sockets servidores tradicionalmente (especialmente em C) requerem
dois passos após sua criação:
◦bind: esta operação associa o socket a um endereço local (IP local e
porta).
◦listen: esta operação permite que o socket receba requisições de
conexão.
◦Ambas estas operações são executadas automaticamente no
construtor do socket servidor. Mesmo assim, um socket criado através
do construtor anônimo, pode ser associado a uma porta através do
método bind(address).
Tendo este socket sido criado, o servidor espera um pedido de conexão.
Socket socket = [Link]();
O método accept fica bloqueado até que um cliente requeira uma
requisição para este socket (endereço: host e porta).
Servidor TCP
 Quando do recebimento da conexão, o servidor pode
interagir com o cliente através da leitura e escrita de
dados no socket.
◦ Stream de Leitura:
InputStream in = [Link]();
Este stream tem vários métodos read e pode ser encapsulado por
outros streams de entrada ou leitores (ver pacote [Link]).
◦ Stream de Escrita:
OutputStream out = [Link]();
Este stream tem vários métodos write e pode ser encapsulado por
outros streams de saída ou escritores (ver pacote [Link]).
Note que o socket através do qual o servidor
“conversa” com o cliente é o socket retornado pelo
método accept.
Servidor TCP
Encerramento da conexão.
◦ Com um cliente em específico:
[Link]();
◦ Do socket servidor (terminando a associação com
a porta do servidor):
[Link]();
Outras observações:
◦ Classe InetAddress: representa um endereço IP;
◦ Para saber com quem esta conectado:
[Link]() e [Link]().
Servidor TCP
Servidor TCP
Servidor TCP
Cliente TCP
 Inicialmente,
o cliente deve criar um socket especificando
o endereço e a porta do serviço a ser acessado:
Socket socket = new Socket(host,porta);
Parâmetros: host é endereço ou nome do servidor e
porta é o número da porta em que o servidor espera respostas.
Esta chamada representa a requisição de uma conexão
com o servidor. Se o construtor for executado sem problemas, a
conexão está estabelecida.
A partir daí, da mesma forma que no servidor, o cliente
pode obter os streams de entrada e saída.
 O socket é fechado da mesma forma que no servidor.
Cliente TCP
Cliente TCP
Resumo TCP
Cliente Servidor
new ServerSocket(port,backlog)

new Socket(address,port) accept()

writeUTF(request) request = readUTF()

response = readUTF()

writeUTF(response)

close()

close()
Alguns Problemas Sobre Sockets TCP
 Correspondência de itens de Dados: dois processos devem
concordar quanto aos dados transmitidos ex: (int seguido
de double);
 Bloqueio: Fila destino cheia;
 Threads: ambientes onde não utilizam thread;
Sockets UDP
A comunicação UDP é feita através de duas
classes:
◦ DatagramSocket: diferentemente do TCP, a
mesma classe é utilizada na representação de
sockets UDP tanto nos clientes quanto nos
servidores.
 Socket cliente:
DatagramSocket socket = new
DatagramSocket();
 Socket servidor:
DatagramSocket socket = new
DatagramSocket(porta);
◦ DatagramPacket: as comunicações ocorrem
através da troca de datagramas.
 Esta classe contém os dados a serem enviados/sendo
recebidos bem como o endereço de destino/origem do
datagrama.
Servidor UDP
 Inicialmente
o servidor deve criar um socket que o associe
a uma porta da máquina.
DatagramSocket socket = new DatagramSocket(porta);
porta: número da porta que o socket deve esperar
requisições;
 Tendo
o socket, o servidor pode esperar pelo recebimento
de um datagrama (chamada bloqueante).
byte[] buffer = new byte[n];
DatagramPacket dg = new DatagramPacket(buffer,n);
[Link](dg);
Os dados recebidos devem caber no buffer do
datagrama. Desta forma, protocolos mais complexos baseados
em datagramas devem definir cabeçalhos e mensagens de
controle.
Servidor UDP
O envio de datagramas é realizado também de forma
bastante simples:
byte[] data = ...
DatagramPacket dg = new DatagramPacket(data,[Link],0,host,porta);
[Link](dg);
data: array de bytes a ser enviado
completamente ([Link] é a quantidade de bytes a ser
enviada com offset = 0).
host é endereço ou nome do servidor e porta é o
número da porta em que o servidor espera respostas.
 Fechamento do socket: [Link]();
Servidor UDP
Servidor UDP

}}}}
Cliente UDP
 Inicialmente o cliente deve criar um socket.
DatagramSocket socket = new DatagramSocket();
 Opcional: o cliente pode conectar o socket a um servidor
específico, de tal forma que todos os seus datagramas enviados
terão como destino esse servidor.
[Link](host,porta);
Parâmetros: host é endereço ou nome do servidor e
porta é o número da porta em que o servidor espera respostas.
Executando o connect, o emissor não necessita mais
definir endereço e porta destino para cada datagrama a ser
enviado.
 A recepção e o envio de datagramas, bem como o fechamento do
socket, ocorrem da mesma forma que no servidor.
Cliente UDP
Cliente UDP
Sockets Multicast
 Por ser um modelo baseado em datagramas a
programação baseada em UDP/Multicast IP não difere
muito da programação UDP já vista.
 As duas principais diferenças, em termos de modelo de
programação, são:
◦ Uso da classe (ao invés de DatagramSocket). A classe
MulticastSocket
MulticastSocket estende a classe DatagramSocket ( os métodos da
segunda estão disponíveis na primeira);
◦ Servidores interessados em receber mensagens de um grupo
devem entrar nesse grupo.
Revisão: Multicast IP
 Extensões ao protocolo IP para comunicação multiponto;
 Assim como o IP “unicast”, não oferece garantias a respeito
da entrega ou ordenação de pacotes;
 Cada grupo é identificado por um endereço IP classe D
([Link] a [Link]);
 Define grupos abertos e não provê informações sobre quem
são os membros (membership);
 O gerenciamento de grupos é feito de maneira dinâmica
através de operações implementadas pelo IGMP (Internet
Group Management Protocol).
Sockets Multicast
 Operações para gerenciamento de grupos:
◦ CreateGroup: Cria um grupo cujo único membro é o host criador;
Executa quando um primeiro servidor se junta a um grupo.
◦ JoinGroup: Requisita a adição deste host a um grupo existente;
MulticastSocket socket = new MulticastSocket(porta);
[Link](groupAddress);
◦ LeaveGroup: Pede a remoção do host invocador ao grupo
especificado.
[Link](groupAddress);
 Operações para envio e recepção de grupos:
[Link](request) ou [Link](reply).
Servidor Multicast IP
InetAddress groupAddress = [Link](“[Link]”);

MulticastSocket socket = new MulticastSocket(port);


[Link](groupAddress);

do{
//recebimento dos dados em um buffer de 1024 bytes
DatagramPacket dg = new DatagramPacket(
new byte[1024],1024);
[Link](dg); //recepção

//imprime a mensagem recebida


[Link](“received ”+
new String([Link]).trim());
}while(notExit());

[Link](groupAddress);
[Link]();
Cliente Multicast IP

String message = ...


InetAddress groupAddress = [Link](“[Link]”);

MulticastSocket socket = new MulticastSocket();

byte[] data = [Link]();

//recebimento dos dados em um buffer de 1024 bytes


DatagramPacket dg = new DatagramPacket(
data,[Link],0,groupAddres,port);
[Link](dg); //envio

[Link]();
Referências
Sockets em Java
◦ [Link]
◦ [Link]
Sockets em C
◦ [Link]
◦ [Link]

Você também pode gostar