Redes de Computadores Programação com Sockets



Documentos relacionados
DNS: Domain Name System

Programação de Sockets

Programação de Sockets

socket Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets

Programação de sockets com TCP

Comunicação entre processos

Capítulo 2: Camada de Aplicação

Redes de Computadores I

Programação com sockets (em Java)

Capítulo 2: Camada de Aplicação

User Datagram Protocol

Capítulo 2: Camada de Aplicação

Capítulo 2: Camada de Aplicação

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Capítulo 2: Camada de Aplicação

Aula 30 - Sockets em Java

Redes de Computadores

Redes de Computadores II. Programação com Sockets em Python

Mecanismos de Comunicação. Sockets em java (

Sistemas Distribuídos

INF1013 MODELAGEM DE SOFTWARE

Sistemas Distribuídos

Programação TCP/IP. Protocolos TCP e UDP

REDES DE COMPUTADORES

Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

MÓDULO 8 Modelo de Referência TCP/IP

Olho por olho, e o mundo acabará cego. Mohandas Gandhi

Java 2 Standard Edition Fundamentos de

REDES DE COMPUTADORES

Programação: Sockets em Java

USO GERAL DOS PROTOCOLOS SMTP, FTP, TCP, UDP E IP

Sockets em Java. Leonardo R. Nunes - leonardo@sumersoft.com. 1. Introdução. 2. Sockets TCP/IP

Camada de Transporte. Bruno Silvério Costa

Camada de Transporte TCP/IP e Aplicação

FTP FILE F TRANSFER PROTOCOL. Tópicos

Cliente-servidor com Sockets TCP

UNIVERSIDADE. Sistemas Distribuídos

Capítulo 2: Camada de Aplicação

Implementando comunicação em JAVA via Sockets. Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@sumersoft.

Capítulo 7 CAMADA DE TRANSPORTE

Sockets com Java Parte I

Redes de Computadores. Protocolos de comunicação: TCP, UDP

Rede de Computadores (REC)

Informática I. Aula Aula 22-03/07/06 1

CAMADA DE TRANSPORTE

EXTENSÕES DE ENDEREÇO DA SUB-REDE E DA SUPER-REDE

REDES DE COMPUTADORES

Capítulo 8 - Aplicações em Redes

Um pouco sobre Pacotes e sobre os protocolos de Transporte

REC- Redes de Computadores. Capítulo 5 Camada de Aplicação

TCP/IP TCP UDP IP HTTP HTTPS FTP TFTP TELNET POP3 IMAP SMTP SNMP DHCP

Arquitetura e Protocolos de Rede TCP/IP. Modelo Arquitetural

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Rede de Computadores

Redes de Computadores

Alan Menk Santos Redes de Computadores e Telecomunicações. Camada de Aplicação. Camada de Aplicação

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

A Camada de Transporte

Redes de Computadores e a Internet

Sistemas Distribuídos. Coulouris Capítulo 4

Um pouco do Java. Prof. Eduardo

Capítulo II Modelos de Programação Distribuída

Comunicação via Sockets. Prof. Orlando Loques - IC/UFF. versão

Redes de Computadores /1

Redes de Computadores

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

Protocolos de Internet (família TCP/IP e WWW) Primeiro Técnico. Prof. Cesar

Redes de Computadores e a Internet

Prof. Marcelo Cunha Parte 5

Introdução à Redes de Computadores

Capítulo 11 - Camada de Transporte TCP/IP e de Aplicação. Associação dos Instrutores NetAcademy - Julho de Página

Wireshark. Captura de Protocolos da camada de aplicação. Maicon de Vargas Pereira

Modelos de Camadas. Professor Leonardo Larback

Java : Comunicação Cliente-Servidor.

Considerações no Projeto de Sistemas Cliente/Servidor

Módulo 13. Socket. Programação Orientada a Objetos Java (Rone Ilídio)

Redes de Computadores. Camada de Transporte de Dados: protocolos TCP e UDP Prof. MSc Hugo Vieira L. Souza

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

Threads e Sockets em Java. Threads em Java. Programas e Processos

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

Redes. Pablo Rodriguez de Almeida Gross

Rede d s d e d Com o pu p t u ado d r o es Conceitos Básicos M d o e d los o de d Re R de d s:

Camada de Aplicação. Prof. Eduardo

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Capítulo 2: Camada de Aplicação

Disciplina de Sistemas Distribuídos. Comunicação em Sistemas Distribuídos

Redes de Computadores Aula 3

Capítulo 7 CAMADA DE TRANSPORTE

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

Redes de Computadores. TCP Orientação à Conexão. Prof. Othon M. N. Batista Mestre em Informática

1 Redes de Computadores - TCP/IP Luiz Arthur

Camadas da Arquitetura TCP/IP

Introdução à Camada de Aplicação. Prof. Eduardo

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

Programa de Computador que funciona em Rede

Redes de Computadores Modelo de referência TCP/IP. Prof. MSc. Hugo Souza

Alan Menk Santos Redes de Computadores e Telecomunicações. Camada de Transporte 03/06/2013

Transcrição:

Prof. Othon Batista ( othonb@yahoo.com ) Página 1 Redes de Computadores Programação com Sockets

Prof. Othon Batista ( othonb@yahoo.com ) Página 2 Roteiro Introdução 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 Aplicação Socket com UDP Socket com UDP: Exemplo de Aplicação Servidor Web Simples

Prof. Othon Batista ( othonb@yahoo.com ) Página 3 Introdução Objetivo: aprender a construir aplicações cliente/servidor usando sockets. Os sockets apareceram pela primeira vez em uma implementação do BSD Unix 4.1 em 1981. Devem ser explicitamente criados, usados e liberados. Paradigma cliente/servidor. São a forma mais usada de comunicação entre processos (IPC Inter Process Communication). Há dois tipos de sockets: UDP e TCP.

Prof. Othon Batista ( othonb@yahoo.com ) Página 4 A Arquitetura TCP/IP Serviço orientado à conexão e confiável. SEGMENTO Aplicações cliente/servidor TCP Aplicação IP Rede Física UDP Serviço não orientado à conexão e não confiável. DATAGRAMA Serviço não orientado à conexão e não confiável. DATAGRAMA Comunicação através de endereços IP e portas lógicas.

Prof. Othon Batista ( othonb@yahoo.com ) Página 5 A Arquitetura TCP/IP Os endereços IP são formados por quatro números, tipicamente separados por pontos. Cada número tem o tamanho de 1 byte (0 255). Exemplo: 10.125.3.45 Alguns endereços IP são reservados (não nos interessam neste momento)! Há também os nomes simbólicos, que devem ser traduzidos para endereços IP por algum serviço, tal como o DNS. Exemplo: www.fib.br.

Prof. Othon Batista ( othonb@yahoo.com ) Página 6 Arquitetura TCP/IP Convenção para os números de portas: 0 até 1023 portas privilegiadas; 1024 até 65535 portas sem restrições. Algumas portas privilegiadas: FTP 20 e 21 Telnet 23 SMTP 25 POP3 110 DNS 53 Não use estas portas. A não ser que você saiba o que está fazendo!

Prof. Othon Batista ( othonb@yahoo.com ) Página 7 O Protocolo IP Camada mais baixa da arquitetura TCP/IP. Não é fim-a-fim. Não orientada à conexão. Usada pelos protocolos UDP e TCP. Serviço de datagrama não confiável: a entrega de um datagrama não é garantida; os datagramas podem ser entregues fora de ordem; podem ser recebidos datagramas duplicados. A confiabilidade é dada nas camadas acima!

Prof. Othon Batista ( othonb@yahoo.com ) Página 8 O Protocolo UDP datagramas UDP Usado diretamente pelos programas. É fim-a-fim. Não orientado à conexão. Serviço de datagrama não confiável. Mais ágil de TCP. Usado por: DNS, NFS, SNMP, RIP...

Prof. Othon Batista ( othonb@yahoo.com ) Página 9 O Protocolo TCP segmentos TCP Usado diretamente pelos programas. É fim-a-fim. Orientado à conexão. Serviço confiável. Usado por: FTP, TELNET, SMTP, POP3...

Prof. Othon Batista ( othonb@yahoo.com ) Página 10 Qual Protocolo Usar : UDP ou TCP? TCP deve ser escolhido para aplicações que necessitam de transferência de dados confiável, por exemplo: transferência de arquivos (FTP); terminais virtuais (TELNET). UDP deve ser escolhida para: aplicações simples de pedido/resposta (DNS); aplicações que podem tolerar transmissões de dados não confiáveis (protocolos de roteamento, tal como RIP).

Prof. Othon Batista ( othonb@yahoo.com ) Página 11 Socket com TCP Um socket é uma porta entre o processo de aplicação e um protocolo de transporte fim-a-fim. controlado pelo programador de aplicação controlado pelo sistema operacional processo socket TCP com buffers, variáveis Internet processo socket TCP com buffers, variáveis controlado pelo programador de aplicação controlado pelo sistema operacional Cliente Servidor

Prof. Othon Batista ( othonb@yahoo.com ) Página 12 Socket com TCP O processo servidor deve estar em execução. O servidor deve ter criado socket que aguarda contato do cliente. O cliente cria socket TCP local. O cliente especifica endereço IP, número de porta do processo servidor. Quando o cliente cria um socket, o TCP do cliente estabelece conexão com TCP do servidor Quando contatado pelo cliente, o TCP do servidor cria socket novo para que o processo servidor possa se comunicar com o cliente o servidor conversa com múltiplos clientes

Prof. Othon Batista ( othonb@yahoo.com ) Página 13 Socket com TCP ponto de vista da aplicação TCP provê transferência confiável, ordenada de bytes ( tubo ) entre cliente e servidor

Prof. Othon Batista ( othonb@yahoo.com ) Página 14 Socket com TCP: Exemplo de Aplicação Cliente lê linha da entrada padrão (dousuário), envia para servidor via socket (paraservidor). Servidor lê linha do socket. Servidor converte linha para letras maiúsculas, devolve para o cliente. Cliente lê linha modificada do socket (doservidor), imprime-a. Fluxo de entrada: seqüência de bytes recebida pelo processo. Fluxo de saída: seqüência de bytes transmitida pelo processo. do_usuario para_servidor do_servidor socket do cliente

Prof. Othon Batista ( othonb@yahoo.com ) Página 15 Socket com TCP: Exemplo de Aplicação ( nomehosp Servidor (executa em cria socket, porta=x, para receber pedido: socketrecepção = () ServerSocket aguarda chegada de pedido de conexão socketconexão = () socketrecepção.accept lê pedido de socketconexão escreve resposta para socketconexão fecha socketconexão TCP configuração Cliente cria socket, abre conexão a nomehosp, porta=x socketcliente = () Socket Envia pedido usando socketcliente lê resposta de socketcliente fecha socketcliente

Socket com TCP: ( Cliente ) Exemplo de Aplicação import java.io.*; import java.net.*; class ClienteTCP { Cria fluxo de entrada Cria socket de cliente, conexão ao servidor Cria fluxo de saída ligado ao socket 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()); Prof. Othon Batista ( othonb@yahoo.com ) Página 16

Prof. Othon Batista ( othonb@yahoo.com ) Página 17 Socket com TCP: ( Cliente ) Exemplo de Aplicação Cria fluxo de entrada ligado ao socket Envia linha ao servidor Lê linha do servidor BufferedReader doservidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream())); frase = dousuario.readline(); paraservidor.writebytes(frase + '\n'); frasemodificada = doservidor.readline(); System.out.println( Do Servidor: " + frasemodificada); socketcliente.close(); } }

Socket com TCP: ( Servidor ) Exemplo de Aplicação import java.io.*; import java.net.*; class servidortcp { Cria socket para recepção na porta 6789 Aguarda, no socket para recepção, o contato do cliente Cria fluxo de entrada, ligado ao socket 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(new InputStreamReader(socketConexao.getInputStream())); Prof. Othon Batista ( othonb@yahoo.com ) Página 18

Prof. Othon Batista ( othonb@yahoo.com ) Página 19 Socket com TCP: ( Servidor ) Exemplo de Aplicação Cria fluxo de saída, ligado ao socket Lê linha do socket DataOutputStream paracliente = new DataOutputStream(socketConexão.getOutputStream()); frasecliente= docliente.readline(); fraseemmaiusculas= frasecliente.touppercase() + '\n'; Escreve linha ao socket } } } paraclient.writebytes(fraseemmaiusculas); Final do elo while, volta ao início e aguarda conexão de outro cliente

Prof. Othon Batista ( othonb@yahoo.com ) Página 20 Socket com UDP UDP não estabelece conexão. remetente coloca explicitamente endereço IP e porta do destino. servidor deve extrair endereço IP, porta do remetente do datagrama recebido. Os dados transmitidos podem ser recebidos fora de ponto de vista da aplicação ordem, ou perdidos. UDP provê transferência não confiável de grupos de bytes ( datagramas ) entre cliente e servidor

Prof. Othon Batista ( othonb@yahoo.com ) Página 21 Socket com UDP Servidor (executa em ( nomehosp Cliente cria socket, porta=x, para pedido que chega: socketservidor = () DatagramSocket lê pedido do socketservidor cria socket, socketcliente = () DatagramSocket cria, endereça (nomehosp, porta=x, envia pedido em datagrama usando socketcliente escreve resposta ao socketservidor especificando endereço IP, número de porta do cliente lê resposa do socketcliente fecha socketcliente

Prof. Othon Batista ( othonb@yahoo.com ) Página 22 Socket com UDP: ( Cliente ) Exemplo de Aplicação

Socket com UDP: ( Cliente ) Exemplo de Aplicação import java.io.*; import java.net.*; Cria fluxo de entrada Cria socket de cliente Traduz nome de hospedeiro ao endereço IP usando DNS 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(); Prof. Othon Batista ( othonb@yahoo.com ) Página 23

Prof. Othon Batista ( othonb@yahoo.com ) Página 24 Socket com UDP: ( Cliente ) Exemplo de Aplicação Cria datagrama com dados para enviar, comprimento, endereço IP, porta Envia datagrama ao servidor Lê datagrama do servidor 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(); }

Prof. Othon Batista ( othonb@yahoo.com ) Página 25 Socket com UDP: ( Servidor ) Exemplo de Aplicação

Prof. Othon Batista ( othonb@yahoo.com ) Página 26 Socket com UDP: ( Servidor ) Exemplo de Aplicação import java.io.*; import java.net.*; Cria socket para datagramas na porta 9876 Aloca memória para receber datagrama Recebe datagrama 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);

Prof. Othon Batista ( othonb@yahoo.com ) Página 27 Socket com UDP: ( Servidor ) Exemplo de Aplicação Obtém endereço IP, no. de porta do remetente String frase = new String(pacoteRecebido.getData()); InetAddress IPAddress = pacoterecebido.getaddress(); int porta = pacoterecebido.getport(); String fraseemmaiusculas = frase.touppercase(); Cria datagrama p/ enviar ao cliente Escreve datagrama no socket } } dadosenviados = fraseemmaiusculas.getbytes(); DatagramPacket pacoteenviado = new DatagramPacket(dadosEnviados, dadosenviados.length, IPAddress, porta); socketservidor.send(pacoteenviado); } Fim do elo while, volta ao início e aguarda chegar outro datagrama

Prof. Othon Batista ( othonb@yahoo.com ) Página 28 Servidor Web Simples Funções 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 do arquivo solicitado precedido por linhas de cabeçalho Envia a resposta diretamente ao cliente.

Prof. Othon Batista ( othonb@yahoo.com ) Página 29 Servidor Web Simples Contém a classe StringTokenizer que é usada para examinar o pedido Primeira linha da mensagem de pedido HTTP e Nome do arquivo solicitado Aguarda conexão do cliente Cria fluxo de Entrada Cria fluxo de Saída import 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());

Prof. Othon Batista ( othonb@yahoo.com ) Página 30 Servidor Web Simples Lê a primeira linha do pedido HTTP que deveria ter o seguinte formato: GET file_name HTTP/1.0 Examina a primeira linha da mensagem para extrair o nome do arquivo Associa o fluxo infile ao arquivo filename Determina o tamanho do arquivo e constrói um vetor de bytes do mesmo tamanho requestmessageline = infromclient.readline(); StringTokenizer tokenizedline = new StringTokenizer(requestMessageLine); if (tokenizedline.nexttoken().equals("get")){ filename = tokenizedline.nexttoken(); ( true if (filename.startswith("/") == 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);

Prof. Othon Batista ( othonb@yahoo.com ) Página 31 Servidor Web Simples Inicia a construção da mensagem de resposta Transmissão do cabeçalho da resposta HTTP. outtoclient.writebytes( "HTTP/1.0 200 Document Follows\r\n"); ((" filename.endswith(".jpg ) if outtoclient.writebytes("content-type: image/jpeg\r\n"); ((" filename.endswith(".gif ) if 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"); }