Cliente-servidor com Sockets TCP



Documentos relacionados
Cliente-servidor com Sockets TCP

Programação com sockets (em Java)

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

Orientação a Objetos

Mecanismos de Comunicação. Sockets em java (

INF1013 MODELAGEM DE SOFTWARE

Sistemas Distribuídos

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

Sockets com Java Parte I

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

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

Comunicação entre processos

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

Sockets. Introdução. Introdução. Programando para redes em Java. mecanismo de alto nível para acessar recursos na Internet.

Aula 30 - Sockets em Java

Programação de Sockets em C/C++

Passagem de Mensagens

Sockets. Bruno Guimarães Lucas Rossini

Camada de Transporte, protocolos TCP e UDP

Java : Comunicação Cliente-Servidor.

Sistemas Distribuídos

Java 2 Standard Edition Fundamentos de

Programação de Sockets

Caso 1 NetScanner Main

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

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

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

Redes de Computadores II

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Tecnologia de Redes. Protocolo TCP

Sistemas Operacionais:

Sistemas Distribuídos Java Sockets

Programação de sockets com TCP

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

Redes de Computadores. Camada de Transporte

INTRODUÇÃO ÀS REDES DE COMPUTADORES

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

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

Programação II Java Streams. Christopher Burrows

REDES DE COMPUTADORES

Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO

UNIVERSIDADE. Sistemas Distribuídos

Redes de Computadores. Trabalho de Laboratório Nº7

Programação: Sockets em Java

Comunicação entre Processos

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

Sistemas de Operação Sockets

Programação de Redes de Computadores em Java

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

Modelo Cliente/Servidor e Introdução a Sockets

Redes de Computadores (PPGI/UFRJ)

Um pouco do Java. Prof. Eduardo

Redes de Computadores

Sockets em Ruby. Curso de Tecnologia em Redes de Computadores Programação para Redes

Capítulo 6. Java IO - Ficheiros

A Camada de Transporte

Invocação de Métodos Remotos

Arquivos. Profa. Thienne Johnson EACH/USP

Camada de rede. Camada de enlace. Meio Físico

INF01018 Aula Prática 1 Cliente-Servidor e Multicast


CAMADA DE TRANSPORTE

CCNA 2 Conceitos Básicos de Roteadores e Roteamento

Relatório 1º Laboratório: O Java e os Sockets. Licenciatura: ETI Turma : ETC1 Grupo : rd3_t3_02 Data: 22/02/2010

Sistemas Distribuídos. Prof. Ricardo Ribeiro dos Santos

Redes de Computadores I Licenciatura em Eng. Informática e de Computadores 1 o Semestre, 26 de Outubro de o Teste A

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

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

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

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

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

Roteiro. Introdução a Arquivos. Streams Serialização Arquivos de Acesso Randômico Exercícios. Armazenamento. Dados em vetores, listas e variáveis

Comunicação em Sistemas Distribuídos

Redes de Computadores Programação com Sockets


Programação de Sockets

Programação Orientada a Objetos com Java. Prof. Júlio Machado julio.machado@pucrs.br

Sistemas Distribuídos Capítulos 2 e 3: Modelos, Arquitecturas e Revisão de Redes

Redes de Computadores I

sockets interprocess communication Taisy Weber

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

Sistemas Distribuídos

Rede de Computadores

FTP FILE F TRANSFER PROTOCOL. Tópicos

Programação com Sockets

Tipos de Servidores. Servidores com estado

REDES DE COMPUTADORES

Aula 2 Arquitetura de Redes. Prof. Dr. S. Motoyama

TRANSMISSÃO DE DADOS Prof. Ricardo Rodrigues Barcelar

Ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão. Ler e escrever bytes, caracteres e Strings de/para arquivos

Transcrição:

Cliente-servidor com Sockets TCP Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho 2007/2008 c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 1

Comunicação orientada à conexão via TCP/IP Servidor fica à espera de ligações. Cliente liga-se ao servidor, sendo estabelecida conexão. Conexão é um canal fiável para comunicação bidireccional. Um socket representa um extremo de uma conexão. Uma conexão é caracterizada por um socket-pair. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 2

Características de uma conexão TCP Fiabilidade: quando são enviados dados é esperado um acknowledgment; se não vier, os dados são retransmitidos. Ordem: os dados são partidos em segmentos numerados; se chegarem fora de ordem são reordenados; se chegar em duplicado é descartado. Controlo de fluxo: cada lado diz quantos bytes está disposto a receber: janela; janela representa tamanho de buffer disponível no receptor; pode aumentar ou diminuir conforme dados são lidos pela aplicação ou chegam; se receptor estiver lento, emissor tem que esperar. Full-duplex: uma conexão é bidireccional, para enviar e receber dados. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 3

Endereçamento Cada máquina (host) tem (pelo menos) um endereço ip. Exemplo: 193.136.19.96 Podem existir vários serviços em cada máquina. Serviços de uma máquina são distinguidos por portos. Um servidor especifica em que porto escuta. Um cliente especifica onde se ligar com um par (ip,porto). c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 4

Gamas de portos Um porto é um número de 16 bits. Serviços internet com números de 0 1023, standardizados pela IANA (Internet Assigned Numbers Authority); e.g.: echo: 7 ftp: 21 ssh: 22 telnet: 23 www: 80 Portos registadas, de 1024 49151; registadas na IANA como conveniência à comunidade. Portos dinâmicos, de 49152-65535: são atribuídos a sockets de clientes para distinguir conexões; podem ser usados por servidores que usam um serviço de localização. Ver lista em http://www.iana.org/assignments/port-numbers. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 5

Cliente-servidor com TCP esqueleto Cliente: socket() connect() while () write() read() close() Servidor socket() bind() listen() while () accept() while () read() write() close() c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 6

Cliente Etapas de um cliente: Criar socket. Connect: é especificado o ip e porto do servidor; inicia o three-way handshake para estabelecer conexão com o servidor. Troca de dados escrevendo e lendo do connected socket. Close: fecha conexão. (Pode ser cliente ou servidor.) c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 7

Servidor Etapas de um servidor Criar socket. Bind: atribui endereço local ao socket: tipicamente apenas o porto; pode ser especificado qual dos ip locais no caso de uma máquina com vários ip. Listen: coloca o socket no modo listening, para poder aceitar pedidos de connect a ele dirigidos; permite especificar o backlog: quantas conexões são guardadas pelo kernel antes de serem retiradas pelo accept. Accept: devolve connected socket da lista de conexões estabelecidas; bloqueia caso ainda não exista conexão estabelecida. Troca de dados lendo e escrevendo do connected socket. Close: fecha conexão. (Pode ser cliente ou servidor.) c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 8

Estabelecimento de conexão O servidor tem que estar preparado para aceitar conexões, fazendo socket, bind, listen (um chamado passive open). Um accept que seja feito bloqueia. É efectuado um three-way handshake: O cliente faz um active open com connect; é enviado um SYN. O servidor toma nota de conexão a ser estabelecida; faz ACK ao SYN e envia o seu SYN; quando segmento chega, o connect retorna no cliente. O cliente faz ACK ao SYN do servidor; quando segmento chega, a conexão está estabelecida e um accept pode retornar. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 9

Estabelecimento de conexão Entre o momento em que uma conexão começa e acaba de ser estabelecida passa um round-trip time (RTT); Durante este tempo, a conexão está numa fila de conexões a ser estabelecidas. Se forem chegando muitos pedidos de conexão, esta fila pode crescer. O backlog especifica a soma dos tamanhos das filas de conexões a ser estabelecidas ou já estabelecidas e ainda não obtidas pelo accept. É importante que o backlog seja alto para servidores com muita carga em redes com elevada latência. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 10

Terminação de conexão São efectuados 4 passos: 1 Um lado (cliente ou servidor) faz close (active close), sendo enviado um FIN. 2 O outro lado que recebe o FIN faz um passive close, sendo enviado um ACK do FIN; é provocado um EOF na leitura. 3 Mais tarde a aplicação que recebeu o EOF faz close do socket; é enviado um FIN. 4 O lado que fez o active close faz ACK a este FIN. Entre os passos 2 e 3, é possível serem enviados dados para quem fez o active close; neste caso temos um half-close. Um half-close pode ser obtido com shutdown, para permitir a parte activa receber dados. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 11

Sockets em Java Classes Socket e ServerSocket, em java.net; No cliente, criação de socket e connect efectuados em conjunto pelo construtor: String host; int port; Socket con = new Socket(host, port); No servidor, criação de socket, bind e listen efectuados pelo construtor de ServerSocket: ServerSocket srv = new ServerSocket(port); O accept devolve um connected socket de uma conexão: Socket con=srv.accept(); c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 12

Streams Os InputStream e OutputStream associados ao socket são obtidos com: InputStream is = con.getinputstream(); OutputStream os = con.getoutputstream() Normalmente são usados streams com mais funcionalidade, e.g.: DataInputStream dis = new DataInputStream(con.getInputStream()); DataOutputStream dos = new DataOutputStream(con.getOutputStream()); Ou: ObjectInputStream ois = new ObjectInputStream(con.getInputStream()); ObjectOutputStream oos = new ObjectOutputStream(con.getOutputStream()); c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 13

Exemplo Hello world cliente import java.io.*; import java.net.*; public class Client { public static void main(string[] args) { try{ if(args.length<2) System.exit(1); String host = args[0]; int port = Integer.parseInt(args[1]); Socket s = new Socket(host, port); DataInputStream dis = new DataInputStream(s.getInputStream()); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); dos.writeutf("hello world"); String res = dis.readutf(); System.out.println(res); }catch(exception e){ e.printstacktrace(); } } } Cliente envia uma string e recebe outra. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 14

Exemplo Hello world servidor import java.io.*; import java.net.*; public class Server { public static void main(string[] args) { try{ int port = java.lang.integer.parseint(args[0]); ServerSocket srv = new ServerSocket(port); while (true) { Socket cli=srv.accept(); System.out.println(cli.getInetAddress() + " "+ cli.getport() ); DataInputStream dis = new DataInputStream(cli.getInputStream()); DataOutputStream dos = new DataOutputStream(cli.getOutputStream()); String st = dis.readutf(); String res = st.touppercase(); dos.writeutf(res); } }catch(exception e){ e.printstacktrace(); } } } Servidor atende clientes sequencialmente. Para cada, lê string, converte para maiúsculas e devolve. c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets TCP 15