Infra-Estrutura de Comunicação (IF678)

Preview:

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

Citation preview

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)

CIn/UFPE

Bruno Gentilini (bgda)

Eduardo Souza (efs)

Luís Felipe Auto (lfag)

Caio Mc Intyre (cfmi)

Lucas Ventura (lvs)

Sérgio Pessoa (srpvnf)

2

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

Nosso objetivo:

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

3

AgendaAgenda

4

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

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

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

}}

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

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.

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

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

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

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

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

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

Recommended