Programação de sockets com TCP

Documentos relacionados
Programação de Sockets

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

Programação de Sockets

Comunicação entre processos

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

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

Capítulo 2 Camada de aplicação

Capítulo 2. Camada de aplicação

Capítulo 2 Camada de aplicação

Programação: Sockets em Java

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

Programação com sockets (em Java)

Redes de Computadores Programação com Sockets

PROGRAMAÇÃO COM SOCKETS

INF1013 MODELAGEM DE SOFTWARE

Aula 30 - Sockets em Java

Mecanismos de Comunicação. Sockets em java (

Redes de Computadores I

Sistemas Distribuídos

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

Java 2 Standard Edition Fundamentos de

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

Capítulo 2 Camada de aplicação

Sistemas Distribuídos

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

Um pouco do Java. Prof. Eduardo

UNIVERSIDADE. Sistemas Distribuídos

Sockets. Bruno Guimarães Lucas Rossini

Sistemas Distribuídos. Coulouris Capítulo 4

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

Passagem de Mensagens

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

FTP FILE F TRANSFER PROTOCOL. Tópicos

Infra-Estrutura de Comunicação (IF678)

Capítulo 7 CAMADA DE TRANSPORTE

Sockets com Java Parte I

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

User Datagram Protocol

Sistemas Distribuídos Java Sockets

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

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

Redes de Computadores

Cliente-servidor com Sockets TCP

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

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

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

3. Explique o motivo pelo qual os protocolos UDP e TCP acrescentam a informação das portas (TSAP) de origem e de destino em seu cabeçalho.

Redes de Computadores /1

INF01018 Aula Prática 1 Cliente-Servidor e Multicast

Redes de Computadores. Camada de Transporte

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

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

Um pouco sobre Pacotes e sobre os protocolos de Transporte

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

REDES DE COMPUTADORES

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Infra-Estrutura de Comunicação (IF678)

Rede de Computadores II

Redes de Computadores

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

Rede de Computadores (REC)

Comunicação em Sistemas Distribuídos

Sistemas Distribuídos. Prof. Ricardo Ribeiro dos Santos

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

Java : Comunicação Cliente-Servidor.

Computação Distribuída

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTÁTISTICA GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMUNICAÇÃO DE DADOS

Redes de Computadores II

Programação com Sockets

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

Camada de Transporte TCP/IP e Aplicação

Streaming vídeo com RTSP e RTP

Sistemas Operacionais:

Redes de Computadores e a Internet

Redes de Computadores e a Internet

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

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

REDES DE COMPUTADORES

Redes de computadores

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Aula 3. Objetivos. A internet.

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

Transcrição:

Programação de sockets Objetivo: aprender a construir aplicações cliente-servidor que se comunicam usando sockets SOCKET = API (Application Program Interface) Introduzida no BSD4.1 UNIX, 1981 * Explicitamente criados, usados e liberados pelas aplicações Paradigma cliente-servidor Dois tipos de serviço de transporte via socket API: Datagrama não confiável Confiável, orientado a cadeias de bytes SOCKET Uma interface local, criada por aplicações, controlada pelo OS (uma porta ) na qual os processos de aplicação podem tanto enviar quanto receber mensagens de e para outro processo de aplicação (local ou remoto) * Berkeley Software Distribution (BSD, às vezes chamada de Berkeley Unix) é o sistema operacional UNIX derivados desenvolvidos e distribuídos pela Computer Systems Research Group (CSRG), da Universidade da Califórnia, em Berkeley, de 1977 a 1995. Programação de sockets com TCP Socket: uma porta entre o processo de aplicação e o protocolo de transporte fima-fim (UCP ou TCP) Serviço TCP: transferência confiável de bytes de um processo para outro 1

Programação de sockets com TCP Cliente deve contatar o servidor Processo servidor já deve estar em execução Servidor deve ter criado socket (porta) que aceita o contato do cliente Cliente contata o servidor ndo um socket TCP local Especificando endereço IP e número da porta do processo servidor Quando o cliente cria o socket: cliente TCP estabelece conexão com o TCP do servidor Quando contatado pelo cliente, o TCP do servidor cria um novo socket para o processo servidor comunicar-se com o cliente Permite ao servidor conversar com múltiplos clientes Números da porta de origem são usados para distinguir o cliente Ponto de vista da aplicação TCP fornece a transferência confiável, em ordem de bytes ( pipe ) entre o cliente e o servidor Programação de sockets com TCP Exemplo de aplicação cliente-servidor: 1) Cliente lê linha da entrada-padrão do sistema (infromuser stream), envia para o servidor via socket (outtoserver stream) 2) Servidor lê linha do socket 3) Servidor converte linha para letras maiúsculas e envia de volta ao cliente 4) Cliente lê a linha modificada através do (infromserver stream) Programação de sockets com TCP 2

Processo cliente teclado monitor input stream processo cliente infromuser stream de saída: seqüência de bytes para fora do processo output stream outtoserver stream de entrada: seqüência de bytes para dentro do processo infromserver input stream TCP socket clientsocket cliente TCP socket para rede da rede Interação cliente-servidor TCP 3

Exemplo: cliente Java (TCP) import java.io.*; import java.net.*; class TCPClient { stream de entrada socket cliente, conecta ao servidor stream de saída ligado ao socket public static void main(string argv[]) throws Exception { String sentence; String modifiedsentence; BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); Socket clientsocket = new Socket("hostname", 6789); DataOutputStream outtoserver = new DataOutputStream(clientSocket.getOutputStream()); Exemplo: cliente Java (TCP) stream de entrada ligado ao socket BufferedReader infromserver = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = infromuser.readline(); Envia linha para o servidor Lê linha do servidor outtoserver.writebytes(sentence + '\n'); modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); clientsocket.close(); 4

Exemplo: servidor Java (TCP) import java.io.*; import java.net.*; class TCPServer { socket de aceitação na porta 6789 Espera, no socket de aceitação, por contato do cliente stream de entrada ligado ao socket public static void main(string argv[]) throws Exception { String clientsentence; String capitalizedsentence; ServerSocket welcomesocket = new ServerSocket(6789); while(true) { Socket connectionsocket = welcomesocket.accept(); BufferedReader infromclient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); Exemplo: servidor Java (TCP) stream de saída ligado ao socket Lê linha do socket Escreve linha para o socket DataOutputStream outtoclient = new DataOutputStream(connectionSocket.getOutputStream()); clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.writebytes(capitalizedsentence); Fim do while loop, retorne e espere por outra conexão do cliente 5

Programação de sockets com UDP UDP: não há conexão entre o cliente e o servidor Não existe apresentação Transmissor envia explicitamente endereço IP e porta de destino em cada mensagem Servidor deve extrair o endereço IP e porta do transmissor de cada datagrama recebido UDP: dados transmitidos podem ser recebidos fora de ordem ou perdidos Ponto de vista da aplicação UDP fornece a transferência não confiável de grupos de bytes (datagramas) entre o cliente e o servidor Interação cliente-servidor: UDP Servidor (Rodando em hostid) r socket port=x para requisição entrante: serversocket = DatagramSocket ( ) Cliente r socket clientsocket= DatagramSocket ( ) Ler requisição de serversocket r endereço (hostid, port=x) enviar requisição de datagrama clientsocket Escrever resposta para serversocket especificando o endereço do hospedeiro cliente e o número da porta Ler resposta de clientsocket Fechar clientsocket 6

Exemplo: cliente Java (UDP) Pacote de datagrama UDP sendpacket receivepacket Pacote de datagrama UDP Socket UDP Exemplo: cliente Java (UDP) import java.io.*; import java.net.*; stream de entrada socket cliente Translada nome do hospedeiro para endereço IP usando DNS class UDPClient { public static void main(string args[]) throws Exception { BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientsocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); 7

Exemplo: cliente Java (UDP) datagrama com dados a enviar, tamanho, endereço IP porta Envia datagrama para servidor Lê datagrama do servidor DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, 9876); clientsocket.send(sendpacket); DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); clientsocket.receive(receivepacket); String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedsentence); clientsocket.close(); Exemplo: servidor Java (UDP) import java.io.*; import java.net.*; socket datagrama na porta 9876 espaço para datagramas recebidos Recebe datagrama class UDPServer { public static void main(string args[]) throws Exception { DatagramSocket serversocket = new DatagramSocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; while(true) { DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); 8

Exemplo: servidor Java (UDP) Obtém endereço IP e número da porta do transmissor datagrama para enviar ao cliente Escreve o datagrama para dentro do socket String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); Termina o while loop, retorna e espera por outro datagrama Programação de Sockets: referências Tutorial sobre Java: Socket Programming in Java: a tutorial, http://www.javaworld.com/javaworld/jw-12-1996/jw-12-sockets.html Tarefas de programação http://wps.prenhall.com/wps/media/objects/9431/9657438/tarefas_de_pro gramacao/programmingassignment1.zip Referências: http://wps.prenhall.com/wps/media/objects/9431/9657438/conte udo_edicoes_ant/building_a_simple_web_server.zip http://wps.prenhall.com/br_kurose_redes_5/ 9

Tarefas de programação de sockets Tarefa 1: Servidor Web Multithread (ProgrammingAssignment1.zip) http://wps.prenhall.com/br_kurose_redes_5/ Ao final desta tarefa de programação, você terá desenvolvido, em Java, um servidor Web multithread, que seja capaz de atender várias requisições em paralelo. Você implementará a versão 1.0 do HTTP como definida na RFC 1945. Lembre-se de que o HTTP/1.0 cria uma conexão TCP separada para cada par requisição/resposta. Cada uma dessas conexões será manipulada por uma thread. Haverá também uma thread principal, no qual o servidor ficará à escuta de clientes que quiserem estabelecer conexões. Para simplificar o trabalho de programação, desenvolveremos a codificação em dois estágios. No primeiro estágio,você implementará um servidor multithread que simplesmente apresenta o conteúdo da mensagem de requisição HTTP que recebe. Depois que esse programa estiver executando normalmente, você adicionará a codificação necessária para gerar uma resposta apropriada. Ao desenvolver a codificação, você poderá testar seu servidor com um browser Web. Mas lembre-se de que você não estará atendendo através da porta padrão 80, portanto, precisará especificar o número de porta dentro da URL que der a seu browser. Por exemplo, se o nome de seu hospedeiro for host.someschool.edu, seu servidor estiver à escuta na porta 6789 e você quiser obter o arquivo index.html, então deverá especificar a seguinte URL dentro do browser: http://host.someschool.edu:6789/index.html Quando seu servidor encontrar um erro, deverá enviar uma mensagem de resposta com uma fonte HTML adequada, de modo que a informação de erro seja apresentada na janela do browser. Pode ser feito individual ou em dupla Entrega até 26/09 10