8/3/2019 Programao com Sockets
1/31
Prof. Othon Batista ([email protected]) Pgi
Redes de Computadores
Programao com Sockets
8/3/2019 Programao com Sockets
2/31
Prof. Othon Batista ([email protected]) Pgi
Roteiro
Introduo A Arquitetura TCP/IP O Protocolo IP O Protocolo UDP O Protocolo TCP Qual Protocolo Usar: UDP
ou TCP? Socket com TCP Socket com TCP: Exemplo
de Aplicao
Socket com UDP Socket com UDP: Exempde Aplicao
Servidor Web Simples
8/3/2019 Programao com Sockets
3/31
Prof. Othon Batista ([email protected]) Pgi
Objetivo: aprender a construir aplicaescliente/servidor usando sockets. Os sockets apareceram pela primeira vez em um
implementao do BSD Unix 4.1 em 1981. Devem ser explicitamente criados, usados e liberado Paradigma cliente/servidor. So a forma mais usada de comunicao entre proces
(IPC Inter Process Communication ). H dois tipos de sockets:UDP e TCP .
Introduo
8/3/2019 Programao com Sockets
4/31
Prof. Othon Batista ([email protected]) Pgi
A Arquitetura TCP/IP
TCP UDP
IP
Rede Fsica
Aplicao Servio no orientado conexo e no confivel.DATAGRAMA
Servio orientado conexo e confivel.
SEGMENTO
Aplicaescliente/servidor
Comunicao atravs deendereos IP e portaslgicas .
Servio no orientado conexo e no confivel.
DATAGRAMA
8/3/2019 Programao com Sockets
5/31
Prof. Othon Batista ([email protected]) Pgi
A Arquitetura TCP/IP
Os endereos IP so formados por quatro nmertipicamente separados por pontos. Cada nmero tem o tamanho de 1 byte (0 255)
Exemplo:10.125.3.45 Alguns endereos IP so reservados (no nosinteressam neste momento)!
H tambm os nomes simblicos, que devem sertraduzidos para endereos IP por algum servio,como o DNS. Exemplo:www.fib.br .
8/3/2019 Programao com Sockets
6/31
Prof. Othon Batista ([email protected]) Pgi
Arquitetura TCP/IP
Conveno para os nmeros de portas: 0 at 1023 portas privilegiadas; 1024 at 65535 portas sem restries.
Algumas portas privilegiadas: FTP 20 e 21 Telnet 23
SMTP
25 POP3 110 DNS 53
No use estas portas.A no ser que voc saiba
o que est fazendo!
8/3/2019 Programao com Sockets
7/31Prof. Othon Batista ([email protected]) Pgi
O Protocolo IP
Camada mais baixa da arquitetura TCP/IP. No fim-a-fim. No orientada conexo.
Usada pelos protocolos UDP e TCP. Servio de datagrama no confivel:
a entrega de um datagrama no garantida; os datagramas podem ser entregues fora de ordem; podem ser recebidos datagramas duplicados.
A confiabilidade dada nas camadas acima!
8/3/2019 Programao com Sockets
8/31Prof. Othon Batista ([email protected]) Pgi
O Protocolo UDP
Usado diretamente pelos programas.
fim-a-fim. No orientado conexo. Servio de datagrama no confivel. Mais gil de TCP. Usado por:DNS, NFS, SNMP, RIP ...
datagramas UDP
8/3/2019 Programao com Sockets
9/31Prof. Othon Batista ([email protected]) Pgi
O Protocolo TCP
Usado diretamente pelos programas.
fim-a-fim. Orientado conexo. Servio confivel. Usado por:FTP, TELNET, SMTP, POP3 ...
segmentos TCP
8/3/2019 Programao com Sockets
10/31Prof. Othon Batista ([email protected]) Pgin
Qual Protocolo Usar : UDP ou TCP
TCP deve ser escolhido para aplicaes quenecessitam de transferncia de dados confivel, exemplo: transferncia de arquivos (FTP); terminais virtuais (TELNET).
UDP deve ser escolhida para: aplicaes simples de pedido/resposta (DNS); aplicaes que podem tolerar transmisses de dados
confiveis (protocolos de roteamento, tal como RIP)
8/3/2019 Programao com Sockets
11/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP
Um socket uma porta entre o processo deaplicao e um protocolo de transporte fim-a-fi
processo
TCP combuffers,variveis
socket
controlado peloprogramador de
aplicao
controladopelo sistemaoperacional
Cliente
processo
TCP combuffers,
variveis
socket
controlado peloprogramador deaplicao
controladopelo sistema
operacional
Servidor
Internet
8/3/2019 Programao com Sockets
12/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP O processo servidor deve
estar em execuo. O servidor deve ter criado
socket que aguarda contatodo cliente.
O cliente cria socket TCPlocal.
O cliente especificaendereo IP, nmero de porta do processo servidor.
Quando ocliente cria umsocket, o TCP do clienteestabelece conexo comTCP do servidor
Quando contatado pelocliente,o TCP do servidor cria socket novopara que o processo servidor possa secomunicar com o cliente o servidor conversa com
mltiplos clientes
8/3/2019 Programao com Sockets
13/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP
TCP prov transferncia confivel, ordenada de bytes
(tubo) entre cliente e servidor
ponto de vista da aplicao
8/3/2019 Programao com Sockets
14/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP:Exemplo de Aplicao
Cliente l linha da entrada padro (doUsurio ),envia para servidor viasocket ( paraServidor ).
Servidor l linha do socket. Servidor converte linha
para letras maisculas,devolve para o cliente.
Cliente l linha modificadado socket (doServidor ),imprime-a.
Fluxo de entrada: seqnciade bytes recebida pelo processo.
Fluxo de sada: seqncia de
bytes transmitida pelo processo.
socket do cliente
do_usuario p a r a
_ s e r v i d o r
d o
_ s e r v i d o r
8/3/2019 Programao com Sockets
15/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP:Exemplo de Aplicao
aguarda chegada depedido de conexosocketConexo =socketRecepo.accept()
cria socket,porta= x , parareceber pedido:
socketRecepo =ServerSocket ()
cria socket,
abre conexo a nomeHosp , porta= xsocketCliente =Socket()
fechasocketConexo
l resposta desocketCliente
fechasocketCliente
Servidor (executa em nomeHosp ) Cliente
Envia pedido usandosocketClientel pedido de
socketConexo
escreve respostapara socketConexo
TCP
configurao
8/3/2019 Programao com Sockets
16/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP:Exemplo de Aplicao (Cliente)
import java.io.*;import java.net.*;class ClienteTCP {
public static void main(String argv[]) throws Exception{
String frase;String fraseModificada;
BufferedReader doUsuario =new BufferedReader(new InputStreamReader(System.in));
Socket socketCliente = new Socket(nomeHosp", 6789);
DataOutputStream paraServidor =new DataOutputStream(socketCliente.getOutputStream());
Criafluxo de entrada
Cria
socket de cliente,conexo ao servidorCria
fluxo de sadaligado ao socket
k
8/3/2019 Programao com Sockets
17/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP:Exemplo de Aplicao (Cliente)
BufferedReader doServidor =new BufferedReader(newInputStreamReader(socketCliente.getInputStream()));
frase = doUsuario.readLine();
paraServidor.writeBytes(frase + '\n');
fraseModificada = doServidor.readLine();
System.out.println (Do Servidor: " + fraseModificada );
socketCliente.close();
}}
Criafluxo de entradaligado ao socket
Envia linhaao servidor
L linhado servidor
k
8/3/2019 Programao com Sockets
18/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP:Exemplo de Aplicao (Servidor)
import java.io.*;import java.net.*;
class servidorTCP {
public static void main(String argv[]) throws Exception{
String fraseCliente;StringfFraseMaiusculas;
ServerSocket socketRecepcao = new ServerSocket(6789);
while(true) {
Socket socketConexao = socketRecepcao.accept();
BufferedReader doCliente =new BufferedReader(newInputStreamReader(socketConexao.getInputStream()));
Cria socketpara recepona porta 6789
Aguarda, no socket
para recepo, ocontato do cliente
Cria fluxo deentrada, ligado
ao socket
k
8/3/2019 Programao com Sockets
19/31Prof. Othon Batista ([email protected]) Pgin
Socket com TCP:Exemplo de Aplicao (Servidor)
DataOutputStream paraCliente =new DataOutputStream(socketConexo.getOutputStream()) ;
fraseCliente= doCliente.readLine();fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n';
paraClient.writeBytes(fraseEmMaiusculas);}
}}
L linhado socket
Cria fluxode sada, ligado
ao socket
Escreve linhaao socket
Final do elo while,volta ao incio e aguardaconexo de outro cliente
8/3/2019 Programao com Sockets
20/31Prof. Othon Batista ([email protected]) Pgin
Socket com UDP
UDP no estabelece conexo. remetente coloca explicitamente endereo IP e porta do destino.
servidor deve extrair endereo IP, porta doremetente do datagrama recebido. Os dados transmitidos podem ser recebidos for
ordem, ou perdidos. UDP prov transferncia no confivel de grupos de bytes (datagramas) entre cliente e servidor
ponto de vista da aplicao
8/3/2019 Programao com Sockets
21/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP
fechasocketCliente
Servidor (executa em nomeHosp )
l resposa dosocketCliente
cria socket,socketCliente =DatagramSocket()
Cliente
cria, enderea ( nomeHosp, porta=x,envia pedido em datagramausando socketCliente
cria socket,porta= x , parapedido que chega:socketServidor =DatagramSocket()
l pedido dosocketServidor
escreve resposta
ao socketServidor especificando endereoIP, nmero de portado cliente
S k UDP
8/3/2019 Programao com Sockets
22/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP:Exemplo de Aplicao (Cliente)
S k UDP
8/3/2019 Programao com Sockets
23/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP:Exemplo de Aplicao (Cliente)
import java.io.*;
import java.net.*;
class clienteUDP {public static void main(String args[]) throws Exception{
BufferedReader do Usuario=new BufferedReader(new InputStreamReader(System.in));
DatagramSocket socketCliente = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName(nomeHosp");
byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];
String frase = doUsuario.readLine();
sendData = frase.getBytes();
Criafluxo de entrada
Criasocket de cliente
Traduz nome dehospedeiro ao
endereo IPusando DNS
S k UDP
8/3/2019 Programao com Sockets
24/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP:Exemplo de Aplicao (Cliente)
DatagramPacket pacoteEnviado =new DatagramPacket(dadosEnvio, dadosEnvio.length,
IPAddress, 9876);
socketCliente.send(pacoteEnviado);
DatagramPacket pacoteRecebido =new DatagramPacket(dadosRecebidos, dadosRecebidos.length);
socketCliente.receive(pacoteRecebido);
String fraseModificada =new String(pacoteRecebido.getData());
System.out.println(Do Servidor:" + fraseModificada);socketCliente.close();}
}
Cria datagrama comdados para enviar,comprimento,
endereo IP, porta
Envia datagramaao servidor
L datagramado servidor
S k UDP
8/3/2019 Programao com Sockets
25/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP:Exemplo de Aplicao (Servidor)
S k UDP
8/3/2019 Programao com Sockets
26/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP:Exemplo de Aplicao (Servidor)
import java.io.*;import java.net.*;
class servidorUDP {public static void main(String args[]) throws Exception
{
DatagramSocket socketServidor = new DatagramSocket(9876);
byte[] dadosRecebidos = new byte[1024];byte[] dadosEnviados = new byte[1024];
while(true){
DatagramPacket pacoteRecebido =new DatagramPacket(dadosRecebidos,
dadosRecebidos.length);
socketServidor.receive(pacoteRecebido);
Cria socketpara datagramas
na porta 9876
Aloca memria parareceber datagrama
Recebedatagrama
S k UDP
8/3/2019 Programao com Sockets
27/31
Prof. Othon Batista ([email protected]) Pgin
Socket com UDP:Exemplo de Aplicao (Servidor)
String frase = new String(pacoteRecebido.getData());
InetAddress IPAddress = pacoteRecebido.getAddress();
int porta = pacoteRecebido.getPort();
String fraseEmMaiusculas = frase.toUpperCase();
dadosEnviados = fraseEmMaiusculas.getBytes();
DatagramPacket pacoteEnviado =new DatagramPacket(dadosEnviados,
dadosEnviados.length, IPAddress, porta);
socketServidor.send(pacoteEnviado);}
}
}
Obtm endereoIP, no. de porta
do remetente
Escreve
datagramano socketFim do elo while,volta ao incio e aguardachegar outro datagrama
Cria datagrama p/enviar ao cliente
8/3/2019 Programao com Sockets
28/31
Prof. Othon Batista ([email protected]) Pgin
Servidor Web Simples
Funes do servidor Web: Trata apenas um pedido HTTP por vez Aceita e examina o pedido HTTP Recupera o arquivo pedido do sistema de arquivos do
servidor Cria uma mensagem de resposta HTTP consistindo d
arquivo solicitado precedido por linhas de cabealho
Envia a resposta diretamente ao cliente.
8/3/2019 Programao com Sockets
29/31
Prof. Othon Batista ([email protected]) Pgin
Servidor Web Simplesimport java.io.*;import java.net.*;import java.util.*;
class WebServer {public static void main(String argv[]) throws Exception{
String requestMessageLine;String fileName;
ServerSocket listenSocket = new ServerSocket(6789);Socket connectionSocket = listenSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient =new DataOutputStream(
connectionSocket.getOutputStream());
Contm a classeStringTokenizer que
usada para examinaro pedido
Aguarda conexodo cliente
Primeira linha da mensagem
de pedido HTTP eNome do arquivo solicitado
Cria fluxode Entrada
Cria fluxode Sada
8/3/2019 Programao com Sockets
30/31
Prof. Othon Batista ([email protected]) Pgin
Servidor Web Simples
requestMessageLine = inFromClient.readLine();
StringTokenizer tokenizedLine =new StringTokenizer(requestMessageLine);
if (tokenizedLine.nextToken().equals("GET")){fileName = tokenizedLine.nextToken();if (fileName.startsWith("/") == true )
fileName = fileName.substring(1);
File file = new File(fileName);int numOfBytes = (int) file.length();
FileInputStream inFile = new FileInputStream (fileName);
byte[] fileInBytes = new byte[];inFile.read(fileInBytes);
L a primeira linha do
pedido HTTP que deveriater o seguinte formato:GET file_name HTTP/1.0
Examina a primeira linha
da mensagem para extrairo nome do arquivo
Associa o fluxo inFile ao arquivo fileName
Determina o tamanho doarquivo e constri um vetor
de bytes do mesmo tamanho
8/3/2019 Programao com Sockets
31/31
P f Oth B ti t ( th b@ h ) Pgi
Servidor Web Simples
outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n");
if (fileName.endsWith(".jpg")) outToClient.writeBytes("Content-Type: image/jpeg\r\n");
if (fileName.endsWith(".gif")) outToClient.writeBytes("Content-Type:
image/gif\r\n");outToClient.writeBytes("Content-Length: " + numOfBytes +
"\r\n");outToClient.writeBytes("\r\n");
outToClient.write(fileInBytes, 0, numOfBytes);
connectionSocket.close();}
else System.out.println("Bad Request Message");}
}
Transmisso docabealho da resposta
HTTP.
Inicia a construo damensagem de resposta
Top Related