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

Infra-Estrutura de Comunicação (IF678)

  • Upload
    warren

  • View
    25

  • Download
    1

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Infra-Estrutura de Comunicação (IF678)

Infra-Estrutura de Comunicação(IF678)

Aula Prática 02 – 2011.2

CIn/UFPE

Davi DuarteCynthia Raphaella

Ivan FrançaJéssica Barbalho

Larissa PazPaulo Fernando

Page 2: Infra-Estrutura de Comunicação (IF678)

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

Page 3: Infra-Estrutura de Comunicação (IF678)

COMUNICAÇÃO ENTRE PROCESSOS

3

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

Page 4: Infra-Estrutura de Comunicação (IF678)

PROGRAMAÇÃO DE SOCKET TCP - CLIENT

import java.io.*;import java.net.*;import java.util.Scanner;

public class TCPclient {

public static void main(String[] args) throws Exception { //lendo do tecladoString inFromUser = new Scanner(System.in).next();//criando um socket TCPSocket sock = new Socket("localhost", 2000); //stream de saidaDataOutputStream socketOut = new DataOutputStream(sock.getOutputStream());socketOut.writeBytes(inFromUser + '\n');

//resposta do servidorBufferedReader socketIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));System.out.println(socketIn.readLine());

}}

4

Page 5: Infra-Estrutura de Comunicação (IF678)

PROGRAMAÇÃO DE SOCKET TCP - SERVER

import java.io.*;import java.net.*;

public class TCPserver {

public static void main(String argv[]) throws Exception {String inFromClient;String outToClient;//socket de "boas vindas"ServerSocket welcomeSocket = new ServerSocket(2000);

while(true) {//socket de conexão TCPSocket sock = welcomeSocket.accept();

//buffer de entrada, que recebe um streamBufferedReader socketIn = new BufferedReader(new InputStreamReader(sock.getInputStream()));inFromClient = socketIn.readLine();outToClient = inFromClient.toUpperCase() + '\n';//stream de saidaDataOutputStream socketOut = new DataOutputStream(sock.getOutputStream());//stream de saida//escrevendo no socketsocketOut.writeBytes(outToClient);sock.close();}}

}

5

Page 6: Infra-Estrutura de Comunicação (IF678)

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.

Page 7: Infra-Estrutura de Comunicação (IF678)

PROGRAMAÇÃO DE SOCKET UDP - CLIENT

import java.net.*;import java.util.Scanner;

class UDPclient {

public static void main(String args[]) throws Exception {String inFromUser = new Scanner(System.in).next() + '\n'; //entrada do usuárioDatagramSocket clientSocket = new DatagramSocket(); //socket UDPInetAddress IPServer = InetAddress.getByName("localhost"); //IP do servidor

byte[] sendData = new byte[1024]; //dados a serem enviadossendData = inFromUser.getBytes();//criando o pacote de envioDatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPServer, 5000);clientSocket.send(sendPacket);

byte[] receiveData = new byte[1024]; //dados recebidosDatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

clientSocket.receive(receivePacket); //recebendo o pacote String inFromServer = new String(receivePacket.getData());System.out.println("FROM SERVER: " + inFromServer);clientSocket.close();}

}

7

Page 8: Infra-Estrutura de Comunicação (IF678)

PROGRAMAÇÃO DE SOCKET UDP - SERVER

import java.net.*;class UDPserver {

public static void main(String args[]) throws Exception {DatagramSocket serverSocket = new DatagramSocket(5000);byte[] receiveData = new byte[1024] ; byte[] sendData = new byte[1024];String inFromClient, outToClient;InetAddress clientIP; int port;while(true) {//pacote a ser recebidoDatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); //recebendo o pacotesinFromClient = new String(receivePacket.getData()); //colocando na string os dados recebidosclientIP = receivePacket.getAddress(); //pegando o IP e porta do pacote que chegouport = receivePacket.getPort();

outToClient = inFromClient.toUpperCase();sendData = outToClient.getBytes();//enviando pacote de respostaDatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIP, port);serverSocket.send(sendPacket);} }

}

8

Page 9: Infra-Estrutura de Comunicação (IF678)

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.

9

Page 10: Infra-Estrutura de Comunicação (IF678)

EXERCÍCO: EXPLIQUE O QUE FAZ A APLICAÇÃO A SEGUIRimport java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;

public class PortScan { public static String endereco = "localhost"; public static void main(String[] args) { StringBuffer portasOk, portasNok; portasOk = new StringBuffer(); portasNok = new StringBuffer(); Socket s; for (int i = 70 ; i <= 100; i++){ try {

s = new Socket(endereco, i);portasOk.append(i + " ");System.out.println("Porta " + i + "

Aberta");s.close();

} catch (UnknownHostException h){System.out.println(h.getMessage());System.exit(0);

10

} 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}

Page 11: Infra-Estrutura de Comunicação (IF678)

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ê? 11

Page 12: Infra-Estrutura de Comunicação (IF678)

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 Not Found”

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

ATIVIDADE 1: DESENVOLVER UM SERVIDOR WEB...

12

Page 13: Infra-Estrutura de Comunicação (IF678)

13

EXEMPLO – O QUE DEVE SER FEITORequisição (via browser ou telnet)

telnet:GET /index.html HTTP/1.0Host: localhost

Browser:http://ip:porta

Resposta (seu servidor)

HTTP/1.0 200 OKContent-Language: pt-BRContent-Length: 53Content-Type: text/htmlConnection: closeCRLF “enter”dados...

Requisição (via browser ou telnet)

telnet:GET /img2.png HTTP/1.0Host: localhost

Browser:http://ip:porta

Resposta (seu servidor)

HTTP/1.0 200 OKContent-Language: pt-BRContent-Length: 733Content-Type: image/pngConnection: closeCRLF “enter”dados...

Page 14: Infra-Estrutura de Comunicação (IF678)

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

ATIVIDADE 2: