13
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)

Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves ([email protected])[email protected] CIn/UFPE

Embed Size (px)

Citation preview

Page 1: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

Nosso objetivo:

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

2

Page 3: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

AgendaAgenda

3

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

Page 4: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

Comunicação entre processosComunicação entre processos

4

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 5: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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

5

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 6: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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

}} 6

Page 7: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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 8: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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

} }

8

Page 9: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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

}

}

} 9

Page 10: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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.

10

Page 11: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

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

11

Page 12: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

12

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 13: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE

13

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).