infra-estrutura de comunicação (if678)

14
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves ([email protected]) CIn/UFPE Bruno Gentilini (bgda) Eduardo Souza (efs) Luís Felipe Auto (lfag) Caio Mc Intyre (cfmi) Lucas Ventura (lvs) Sérgio Pessoa (srpvnf)

Upload: uri

Post on 11-Jan-2016

26 views

Category:

Documents


0 download

DESCRIPTION

Infra-Estrutura de Comunicação (IF678). Bruno Gentilini (bgda) Eduardo Souza (efs) Luís Felipe Auto (lfag). Caio Mc Intyre (cfmi) Lucas Ventura (lvs) Sérgio Pessoa (srpvnf). Aula Prática 02 Programação de Sockets TCP e UDP. - PowerPoint PPT Presentation

TRANSCRIPT

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

Infra-Estrutura de Comunicação(IF678)

Aula Prática 02 Programação de Sockets TCP e UDP

Professor: Paulo Gonçalves ([email protected])

CIn/UFPE

Bruno Gentilini (bgda)

Eduardo Souza (efs)

Luís Felipe Auto (lfag)

Caio Mc Intyre (cfmi)

Lucas Ventura (lvs)

Sérgio Pessoa (srpvnf)

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

2

http://http://groups.google.com.br/groups.google.com.br/group/comunicacao20082group/comunicacao20082

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

Nosso objetivo:

Revisão sobre Socket Programação de Sockets TCP e UDP Desenvolver um servidor Web

3

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

AgendaAgenda

4

1. Comunicação entre processos2. Programação de Socket TCP3. Programação de Socket UDP4. Desenvolver um servidor Web...

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

Comunicação entre processosComunicação entre processos

5

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 6: Infra-Estrutura de Comunicação (IF678)

Programação de Socket TCP - ClientProgramação de Socket TCP - Client

6

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());

}}

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

Programação de Socket TCP - Programação de Socket TCP - ServerServer

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();}

}} 7

Page 8: 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 9: Infra-Estrutura de Comunicação (IF678)

Programação de Socket UDP - Programação de Socket UDP - ClientClient

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();

} }

9

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

Programação de Socket UDP - Programação de Socket UDP - ServerServer

import java.net.*;

class UDPserver {

public static void main(String args[]) throws Exception {

DatagramSocket serverSocket = new DatagramSocket(5000);

byte[] receiveData = new byte[1024] , sendData = new byte[1024];

String inFromClient, outToClient;

InetAddress clientIP; int port;

while(true) {

//pacote a ser recebido

DatagramPacket receivePacket = new DatagramPacket(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();

//enviando pacote de resposta

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIP, port);

serverSocket.send(sendPacket);

}

}

} 10

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

Exercício

Faça, por meio de uma conexão UDP, o cliente enviar dois números e o servidor responder com a soma deles.

OBS: O cliente deve encerrar após receber a resposta do servidor ou dar um timeout de 30 segundos.

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 o RFC[2616]

- baixar código parcial em www.cin.ufpe.br/~cfmi/comunicacao no link [Aulas]

Desenvolver um servidor Desenvolver um servidor Web...Web...

12

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

13

Exemplo – O que deve ser feitoExemplo – O que deve ser feito

Requisiçã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)

14

ReferênciasReferências

1. James F. Kurose and Keith W. Ross, "Redes de Computadores e a Internet - Uma Nova Abordagem", 3a. edição - 2005 - Ed. Addison Wesley BRA

2. http://www.rfc.net/ 3. http://www.ietf.org/rfc.html4. http://java.sun.com/j2se/1.5.0/docs/api/java/net/package-

summary.html 5. http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html 6. Slides anteriores da monitoria feitos por flávio almeida (faas).