1 / 14

Infra-Estrutura de Comunicação (IF678)

Infra-Estrutura de Comunicação (IF678). Davi Duarte Cynthia Raphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando. Aula Prática 02 – 2011.2. CIn/UFPE. Nosso objetivo: Revisão rápida sobre Socket Programação de Sockets TCP e UDP com Java Desenvolver um servidor Web

warren
Download Presentation

Infra-Estrutura de Comunicação (IF678)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Infra-Estrutura de Comunicação(IF678) Davi Duarte CynthiaRaphaella Ivan França Jéssica Barbalho Larissa Paz Paulo Fernando Aula Prática 02 – 2011.2 CIn/UFPE

  2. Nosso objetivo: • Revisão rápida sobre Socket • Programação de Sockets TCP e UDP com Java • Desenvolver um servidor Web • Desenvolver um sistema de controle de diretórios

  3. Comunicação entre processos • Processos em hosts distintos comunicam-se por meio de envio de mensagens... • enviadas e recebidas através de seu socket Socket é a interface entre a camada de aplicação e a de transporte

  4. Programação de Socket TCP - Client importjava.io.*; importjava.net.*; importjava.util.Scanner; publicclassTCPclient { publicstaticvoidmain(String[] args) throws Exception { //lendo do teclado String inFromUser = new Scanner(System.in).next(); //criando um socket TCP Socketsock = newSocket("localhost", 2000); //stream de saida DataOutputStreamsocketOut = newDataOutputStream(sock.getOutputStream()); socketOut.writeBytes(inFromUser + '\n'); //resposta do servidor BufferedReadersocketIn = newBufferedReader(newInputStreamReader(sock.getInputStream())); System.out.println(socketIn.readLine()); } }

  5. Programação de Socket TCP - Server importjava.io.*; importjava.net.*; publicclassTCPserver { publicstaticvoidmain(String argv[]) throws Exception { String inFromClient; String outToClient; //socket de "boas vindas" ServerSocketwelcomeSocket = newServerSocket(2000); while(true) { //socket de conexão TCP Socketsock = welcomeSocket.accept(); //buffer de entrada, que recebe um stream BufferedReadersocketIn = newBufferedReader(newInputStreamReader(sock.getInputStream())); inFromClient = socketIn.readLine(); outToClient = inFromClient.toUpperCase() + '\n'; //stream de saida DataOutputStreamsocketOut = newDataOutputStream(sock.getOutputStream());//stream de saida //escrevendo no socket socketOut.writeBytes(outToClient); sock.close(); } } }

  6. Exercício • Faça um “Hello [endereço IP do servidor]” e retorne do servidor um “HELLO [endereço IP do cliente]” • OBS: O cliente deve fechar a conexão após receber a resposta do servidor ou dar um timeout de 30 segundos.

  7. Programação de Socket UDP - Client importjava.net.*; importjava.util.Scanner; classUDPclient { publicstaticvoidmain(String args[]) throws Exception { String inFromUser = new Scanner(System.in).next() + '\n'; //entrada do usuário DatagramSocketclientSocket = newDatagramSocket(); //socket UDP InetAddressIPServer = InetAddress.getByName("localhost"); //IP do servidor byte[] sendData = new byte[1024]; //dados a serem enviados sendData = inFromUser.getBytes(); //criando o pacote de envio DatagramPacketsendPacket = newDatagramPacket(sendData, sendData.length, IPServer, 5000); clientSocket.send(sendPacket); byte[] receiveData = new byte[1024]; //dados recebidos DatagramPacketreceivePacket = newDatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); //recebendo o pacote String inFromServer = new String(receivePacket.getData()); System.out.println("FROM SERVER: " + inFromServer); clientSocket.close(); } }

  8. Programação de Socket UDP - Server importjava.net.*; classUDPserver { publicstaticvoidmain(String args[]) throws Exception { DatagramSocketserverSocket = newDatagramSocket(5000); byte[] receiveData = new byte[1024] ; byte[] sendData = new byte[1024]; String inFromClient, outToClient; InetAddressclientIP; intport; while(true) { //pacote a ser recebido DatagramPacketreceivePacket = newDatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); //recebendo o pacotes inFromClient = new String(receivePacket.getData()); //colocando na string os dados recebidos clientIP = receivePacket.getAddress(); //pegando o IP e porta do pacote que chegou port = receivePacket.getPort(); outToClient = inFromClient.toUpperCase(); sendData = outToClient.getBytes(); //enviandopacote de resposta DatagramPacketsendPacket = newDatagramPacket(sendData, sendData.length, clientIP, port); serverSocket.send(sendPacket); } } }

  9. Exercício • Faça, por meio de UDP, o cliente enviar dois números e o servidor responder com a subtração deles. • OBS: O cliente deve encerrar após receber a resposta do servidor ou dar um timeout de 30 segundos.

  10. Exercíco: Explique o que faz a aplicação a seguir importjava.io.IOException; importjava.net.Socket; importjava.net.UnknownHostException; publicclassPortScan { publicstatic String endereco = "localhost"; publicstaticvoidmain(String[] args) { StringBufferportasOk, portasNok; portasOk= newStringBuffer(); portasNok= newStringBuffer(); Sockets; for (int i = 70 ; i <= 100; i++){ try{ s = newSocket(endereco, i); portasOk.append(i + " "); System.out.println("Porta " + i + " Aberta"); s.close(); } catch (UnknownHostException h){ System.out.println(h.getMessage()); System.exit(0); • } catch (IOException e) { • portasNok.append(i + " "); • System.out.println("Porta " + i + " Fechada"); • } }//for System.out.println("Portas abertas: " + portasOk.toString() + "\nPortas fechadas: " + portasNok.toString()); }//main }

  11. Exercícios • Suponha um servidor UDP aceitando pacotes na porta 20001. É possível que mais de um computador envie pacotes UDP para tal host e tal porta? Por quê? • Suponha um servidor TCP com uma conexão já aberta com um host clienteA. É possível a qualquer outro host cliente mandar dados ao servidor usando a conexão do clienteA já aberta? Por quê?

  12. Atividade 1: Desenvolver um servidor Web... • Trata-se de um servidor Web, que responderá a requisições HTTP, bastante simples. Com as seguintes regras: • Deve ser implementado utilizando-se a API de Java • Ele deve manipular apenas uma requisição HTTP; • Ele deve enviar uma mensagem de resposta ao cliente contendo linhas de cabeçalho e o objeto desejado, se existente; • A única verificação necessária é quando o objeto não for encontrado, deve-se retornar: “HTTP/1.0 404 NotFound” • Teste seu servidor utilizando um navegador qualquer! • Mantenha os arquivos que serão baixados na mesma pasta do seu projeto • Dicas: - utilize as classes ServerSocket, Socket, StringTokenizer e File - reveja a aula sobre HTTP - consulte a RFC[2616] • baixar código parcial em www.cin.ufpe.br/~ilfn

  13. Exemplo – O que deve ser feito Requisição (via browser ou telnet) telnet: GET /index.html HTTP/1.0 Host: localhost Browser: http://ip:porta Resposta (seu servidor) HTTP/1.0 200 OK Content-Language: pt-BR Content-Length: 53 Content-Type: text/html Connection: close CRLF “enter” dados ... Requisição (via browser ou telnet) telnet: GET /img2.png HTTP/1.0 Host: localhost Browser: http://ip:porta Resposta (seu servidor) HTTP/1.0 200 OK Content-Language: pt-BR Content-Length: 733 Content-Type: image/png Connection: close CRLF “enter” dados ... 13

  14. Atividade 2: • Faça um programa cliente/servidor que permita ao cliente listar o conteúdo, apagar e criar subdiretórios em uma pasta raiz pré-definida no servidor. • Exemplo: O cliente envia o comando “list pasta raiz”. O servidor retorna a listagem da pasta raiz • Exemplo: O cliente envia o comando “new subdir1”. O servidor cria a pasta subdir1 dentro da pasta raiz • Exemplo: O cliente envia o comando “dele subdir1”. O servidor apaga a pasta subdir1

More Related