Sockets: Sumário. Resumo das Propriedades de UDP e de TCP

Documentos relacionados
Resumo das Propriedades de UDP e de TCP

Sockets e Threads em Java

Programação com Sockets

Canais de Comunicação

Sumário. Introdução ao TCP/IP e à Internet API Sockets para comunicação via redes Exemplos

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27

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

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

Aula de Socket. Rafael De Tommaso do Valle

Modelo Cliente/Servidor e Introdução a Sockets

Sistemas Operacionais - Básico e Avançado - Prof. Celso Maciel da Costa Mestrado em Informática - PUCRS

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

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

Network Programming. Conceitos Básicos A classe InetAddress Programação de Socket TCP Programação de Socket UDP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP)

Redes de Computadores e Aplicações

Programação de Aplicações em. Rede usando Sockets

Utilização das classes Java para comunicação TCP/IP e UDP/IP

Sistemas Distribuídos

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

User Datagram Protocol

Soquetes TCP. Jean Ribeiro Damasceno. Escola de Engenharia Universidade Federal Fluminense (UFF) Rua Passo da Pátria, 156 Niterói RJ Brasil

Camada de Aplicação. Redes Industriais Prof. Rone Ilídio

Programação com Sockets

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP

Servidor UDP Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP

Comunicação entre processos. Sistema centralizado

Mecanismos de Comunicação. Sockets em java (

Redes de Computadores

Reader e Writer para streams de caracteres (texto).

Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Resumo das chamadas UDP. Resumo de Chamadas UDP.

Comunicação entre Processos

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Programação com sockets (em Java)

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

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

Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC, Programação em Comunicações

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Cliente TCP. Programação sockets. Agenda. Cliente TCP. Chamadas sockets para TCP. Chamada socket() Chamada socket()

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

UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA. Sistemas Distribuídos

COMUNICAÇÃO ENTRE APLICAÇÕES. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Introdução à Programação Sockets

Cliente-servidor com Sockets TCP

Programação com Sockets. Redes de Computadores I 2007/2008

PROGRAMAÇÃO COM SOCKETS

Camada de Transporte. Bruno Silvério Costa

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ SOCKETS UDP, TCP E MULTICAST. Prof. Cesar Augusto Tacla

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Programação com Sockets

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Sistemas Distribuídos

Sistemas Distribuídos

Sistemas de Operação Sockets

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

Níkolas Timóteo Paulino da Silva Redes de Computadores I ADS 2ºTermo

API de Sockets. Modelo Cliente/Servidor (2/2) Modelo Cliente/Servidor (1/2) José Pedro Oliveira Sistemas Operativos I

Redes de Computadores

Protocolos de Rede. Protocolos em camadas

Leandro Soares de Sousa (DSc.) Página: Aula 05 - desenvolvimento com sockets

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

Hierarquia de classes. Veja as diversas classes do pacote

Programação Na Web. Servlets: Ciclo de Vida. Agenda. Visão geral sobre ciclo de vida. Nascimento de uma Servlet. Execução de uma Servlet

Camada de Transporte Protocolos TCP e UDP

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

AULA 3 - REDES. Prof. Pedro Braconnot Velloso

Programação TCP/IP (sockets)

Redes de Computadores. Protocolos TCP/IP

camada de transporte SOCKET TCP UDP

Serviços de Comunicações Capítulo 3

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Redes de Computadores I Internet - Conceitos

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

Modelo de Referência TCP/IP

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

Modelo de Referência TCP/IP

UNIVERSIDADE ESTADUAL DE PONTA GROSSA SETOR DE CIÊNCIAS AGRÁRIAS E DE TECNOLOGIA DEPARTAMENTO DE INFORMÁTICA ENGENHARIA DE COMPUTAÇÃO

Sistemas Operacionais II

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché

Figura 1: Formato de Requisição HTTP

Reader e Writer para streams de caracteres (texto).

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

Introdução à Programação Sockets. Programação Sockets. (c) Volnys Bernal. Agenda. Introdução à Programação Sockets

Sistemas Distribuídos

Implementação de Protocolos Criptográficos. Manuel DI Universidade do Minho Setembro de

Arquitetura de Rede. Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina: Redes de Computadores I

Comunicação. Carlos A. G. Ferraz 25/6/2003. Sistemas Distribuídos 1. Tópicos. Camadas. Transmissão de dados. Marshalling/Unmarshalling.

Funções da. Os principais serviços oferecidos pela camada de transporte são: Controle de conexão, Fragmentação, Endereçamento e Confiabilidade.

Aula 30 - Sockets em Java

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Transcrição:

Sockets: Sumário Sockets TCP Modêlo. API de Java. API da biblioteca C. Avaliação Crítica de Sockets. 1 Resumo das Propriedades de UDP e de TCP Propriedade UDP TCP Abstracção Mens. Stream Baseado em Conexão N S Fiabilidade (perda & duplicação) N S Ordem N S Controlo de Fluxo N S Número de Receptores n 1 2

Estabelecimento de Conexão com Sockets Modêlo assimétrico: Um dos processos é activo: toma a iniciativa de estabelecer a conexão com um socket remoto; O outro processo é passivo: escuta num socket local, à espera que algum processo tente estabelecer uma conexão: Não conhece a priori os processos que estabelecem a conexão. Quando recebe e aceita um pedido, cria um novo socket para transferência de dados. O novo socket é a extremidade do canal baseado em conexão. 3 Sockets: Sumário Sockets TCP Modêlo. API de Java. API da biblioteca C. Avaliação Crítica de Sockets. 4

Comunicação Com Conexão em Java Java define 2 classes especificamente para comunicação com conexão: Socket representa um socket TCP usado para transferência de dados. ServerSocket representa um socket TCP usado para receber pedidos de conexão. Tipicamente, uma aplicação: Cria um Socket/ServerSocket. Estabelece uma conexão: O número de invocações de métodos é inferior ao de funções na interface sockets BSD. Transfere a informação: Tipicamente, associando um stream do pacote java.io ao socket. Termina a conexão. 5 Classe ServerSocket Suporta um conjunto de construtores, alguns dos quais permitem: Atribuir um nome ao socket TCP criado. Suporta operações para: Estabelecer uma conexão, Configurar diferentes parâmetros dos sockets, como p.ex.: tamanho de buffers; valores de temporização. 6

Construtores: Classe ServerSocket ServerSocket(int port) Cria um socket TCP que aceita pedidos de conexão no porto especificado. ServerSocket(int port, int backlog, InetAddress addr) Cria um socket TCP que aceita pedidos de conexão no endereço e porto especificados, até um máximo de pedidos pendentes. Métodos: Socket accept() aceita um pedido de conexão; void close() fecha o socket, passando a rejeitar pedidos de conexão; int getreceivebuffersize() retorna o tamanho do buffer de recepção associado ao socket. 7 Construtores, entre outros: Classe Socket Socket() Cria um socket TCP sem estabelecer conexão. Socket(InetAddress addr, int port) Cria um socket TCP para transferências de dados e estabelece conexão com o socket cujo nome é passado como argumento. Métodos, entre outros: InputStream getinputstream() obtém stream para receber dados; OutputStream getoutputstream() obtém stream para transmitir dados; void close() fecha o socket, passando a rejeitar pedidos de conexão. void shutdownoutput() fecha lado stream de transmissão. 8

Transferência de Dados Com Sockets TCP Requer o uso do pacote java.io, concebido para E/S em geral, e acesso a ficheiros em particular. Os métodos getinputstream() e getoutputstream(), retornam streams de bytes, muito simples. Pode usar-se outras classes de daquele pacote para obter streams com funcionalidade adicional: Observações Leitura Escrita Classes abstractas InputStream OutputStream Classe útil InputStreamReader Texto formatado BufferedReader PrintWriter Tipos primitivos DataInputStream DataOutputStream Objectos ObjectInputStream ObjectOutputStream 9 Comunicação Com Conexão em Java: Exemplo (1/2) import java.net.*; import java.io.*; public class EchoServer { public static void main(string[] args) throws IOException { ServerSocket srvsocket; Socket echosocket = null; try { srvsocket = new ServerSocket(4445); } catch (IOException e) { System.out.println("Could not listen on port: 4445"); System.exit(-1); } try { echosocket = srvsocket.accept(); } catch (IOException e) { System.err.println("Accept failed: 4445 ); System.exit(1); } 10

Comunicação Com Conexão em Java: Exemplo (2/2) PrintWriter out = null; BufferedReader in = null; in = new BufferedReader(new InputStreamReader( echosocket.getinputstream())); out = new PrintWriter(echoSocket.getOutputStream(), true); out.println(in.readline()); } } out.close(); in.close(); echosocket.close(); srvsocket.close(); 11 Sockets: Sumário Sockets TCP Modêlo. API de Java. API da biblioteca C. Avaliação Crítica de Sockets. 12

Estabelecimento de Conexão com Sockets Modêlo assimétrico: Um dos processos é activo: toma a iniciativa de estabelecer a conexão com um socket remoto; O outro processo é passivo: escuta num socket local, à espera que algum processo tente estabelecer uma conexão: Não conhece a priori os processos que estabelecem a conexão. Quando recebe e aceita um pedido, cria um novo socket para transferência de dados. O novo socket é a extremidade do canal baseado em conexão. 13 Passos para Comunicação com Sockets TCP 1. Criar um socket: tal como em sockets UDP; 2. Atribuir-lhe um nome: tal como em sockets UDP; 3. Estabelecer uma conexão: Do lado passivo, listen() primeiro e accept() depois; Do lado activo, connect(). 4. Transferir informação: write()/read() ou send()/recv() 5. Fechar a conexão: close() ou, de preferência, shutdown(). 14

Estabelecimento de conexões: lado passivo 1. Assinalar a disponibilidade do processo para estabelecer conexões (chamada ao sistema listen()): deve ser invocado antes dum processo remoto invocar connect(); pedidos simultâneos são processados por ordem de chegada; 2. Aceitar pedidos de conexão (chamada ao sistema accept()): estabelece a conexão; cria um socket que é usado para a comunicação dos dados nessa conexão. 15 Chamada ao sistema listen() int listen(int s, int backlog); onde: s: identificador do socket local que fica à escuta de pedidos de conexão - socket cujo nome deve ser usado em connect(); backlog: comprimento máximo da fila de pedidos de conexão - se a fila estiver cheia quando um pedido chegar, o pedido é ignorado; Obs: listen retorna imediatamente, com o valor 0 (zero) em caso de sucesso e -1, caso contrário. 16

Chamada ao sistema accept() int accept(int s, struct sockaddr *addr, socklen_t *addrlen); s: identificador do socket local que fica à escuta de pedidos de conexão (ver connect()); addr: endereço duma struct sockaddr que será inializada com o nome do socket remoto; addrlen: endereço dum inteiro inicializado com o tamanho de *addr. accept() altera este valor para o comprimento da estrutura de dados com o nome do socket remoto; Retorna: o identificador do socket a usar para transferência de dados: num mesmo computador, pode haver vários sockets TCP com o mesmo nome essencial para suportar comunicação baseada em conexão concorrente. 17 Reuso de Nomes de Sockets em TCP) Ao contrário do que acontece com UDP, canais TCP no mesmo computador podem ter o mesmo número de porto: Um canal TCP é identificado pelos pares (IP Address, TCP Port) das duas extremidades; Permite o atendimento concorrente de vários clientes, em aplicações cliente-servidor, p.ex. Web: browser Web Server 80 80 18 browser

Lado activo: chamada ao sistema connect() int connect(int sock, const struct sockaddr *peer_addr, socklen_t addrlen); onde: sock: identificador do socket local; peer addr: endereço duma struct sockaddr com o nome do socket remoto; addrlen: é o comprimento da estrutura de dados apontada por peer addr IMP: o processo que invoca connect() bloqueia até que a conexão seja estabelecida. 19 Estabelecimento de conexões com sockets listen() connect() accept() 20

int send() send(int s, const void *msg, size_t len, int flags); s: identificador do socket local: usado como argumento em connect() ou retornado por accept(); msg: endereço do buffer contendo a mensagem a transmitir; len: tamanho da mensagem a transmitir; flags: bitmask especificando diferentes opções; send retorna o número de bytes transmitidos (-1 se...) IMP- Se o socket usar TCP, o kernel pode não transmitir imediatamente a mensagem por razões de eficiência. Obs.- Não há necessidade de especificar o nome do socket remoto: é a outra extremidade da conexão cuja extremidade local é s. 21 int recv() recv(int s, const void *buf, size_t len, int flags); s: identificador do socket local: usado como argumento em connect() ou retornado por accept(); buf: endereço do buffer a inicializar com a mensagem recebida; len: tamanho em bytes do buffer buf; flags: bitmask especificando diferentes opções; recv retorna o número de bytes recebidos(-1 se...) IMP- Se o protocolo especificado fôr TCP, o número de bytes recebidos por um recv() não é necessariamente idêntico ao do send() correspondente. 22

Terminação duma conexão: shutdown() e close close(): termina uma conexão normalmente retorna imediatamente, mas o kernel tenta enviar quaisquer dados que lhe foram previamente passados: int close(int so); so: identificador do socket local: usado como argumento em connect() ou retornado por accept(); shutdown(): termina uma conexão parcial ou totalmente: int shutdown(int s, int how); so: identificador do socket local: usado como argumento em connect() ou retornado por accept(); how: se 0, inibe recepção; se 1, inibe transmissão; se 2, inibe recepção e transmissão. IMP.- Em ambos os casos, o socket remoto é notificado. 23 shutdown(): terminação ordenada duma conexão Problema: close() fecha a conexão podendo conduzir à perda de informação ainda não recebida; Solução: usar shutdown(): se um processo não tem mais informação para transmitir, fecha apenas o lado de transmissão usando shutdown(), mas continua a receber até ser notificado que o socket remoto foi fechado; quando um processo é notificado que o socket remoto foi fechado e não tem mais informação para transmitir, fecha o seu socket (usando shutdown() ou close()); 24

Sockets: Sumário Sockets TCP Modêlo. API de Java. API da biblioteca C. Avaliação Crítica de Sockets. 25 Programação com Sockets: Crítica (1/2) Baixo nível de abstracção. Programador tem que lidar com: mensagens; conexões; pormenores de endereços IP e portos: diferentes formatos de representação dos dados. A interface socket Unix/Linux é pesada de usar devido à flexibilidade excessiva: No início dos anos 80, não era seguro que TCP/IP se tornaria o protocolo (aliás, sofreram ainda algumas alterações desde então). O desenvolvimento de aplicações distribuídas requer: a especificação, e a implementação dum protocolo para comunicação entre processos. A programação com sockets só permite comunicação se os processos transmissor e receptor existirem simultaneamente. 26

Programação com Sockets: Crítica (2/2) De qualquer modo, sockets são inevitáveis: são a abstracção da rede oferecida pelo SO. As outras abstracções para desenvolvimento de aplicações distribuídas, são construídas sobre sockets. A generalidade dos serviços/protocolos fundamentais da Internet é programado directamente sobre sockets: DNS; SMTP (email); SNMP (network management); NTP (sincronização de relógios); FTP; HTTP. 27