14
Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões ([email protected] ) Original por: Flávio Almeida ([email protected] ) Professor: Paulo Gonçalves ([email protected]) CIn/UFPE

Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões ([email protected])[email protected] Original por: Flávio

Embed Size (px)

Citation preview

Page 1: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

Infra-Estrutura de Comunicação(IF678)

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

Hugo Simões ([email protected])Original por: Flávio Almeida ([email protected])

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

CIn/UFPE

Page 2: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

Importante:

Cadastro no grupo da disciplina:

• http://groups.google.com.br/group/infra-comunicao2008-1/subscribe

Page 3: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

3

Nosso objetivo:

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

Page 4: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

4

Agenda1. 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) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

5

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

Analogia: Casa e porta (processo e socket)

Page 6: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

Interação dos programas cliente e servidor (TCP) [1/2]

1.Cliente tem a tarefa de iniciar contato com o servidor.

2. Servidor deve está pronto: ativo, rodando antes do cliente tentar iniciar contato

possuir alguma porta (socket) para acolher algum contato inicial de um processo cliente.

3. O processo cliente pode iniciar uma conexão TCP, o que é feito a partir da criação de um socket parâmetros do socket : Endereço IP do hospedeiro servidor e o número de porta do processo servidor

Analogia: ‘bater à porta’ (contato inicial)

Page 7: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

Interação dos programas cliente e servidor (TCP) [2/2]

4. TCP cliente inicia uma apresentação de 3 vias e estabelece uma conexão TCP com Servidor

cliente “bate” no socket de entrada do servidor

servidor ‘ouve’ a batida e cria um novo socket dedicado àquele cliente

Ao final da apresentação, existe uma conexão TCP entre o socket cliente e o novo socket do servidor

Page 8: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

8

Programação de Socket TCP - Clientimport java.io.*;

import java.net.*;class TCPClient {public static void main(String argv[]) throws Exception {

String sentence; String modifiedSentence;

BufferedReader inFromUser = // cria Stream de entrada (teclado) new BufferedReader(new InputStreamReader(System.in));

Socket clientSocket = new Socket("hostname", 8000); // cria Socket Cliente, conecta ao servidor

DataOutputStream outToServer = // cria Stream de saida(do cliente pro servidor)new DataOutputStream(clientSocket.getOutputStream()); // junto ao socket cliente

BufferedReader inFromServer =new BufferedReader(newInputStreamReader(clientSocket.getInputStream())); // cria Stream de entrada (vindo servidor)

// junto ao socket clientesentence = inFromUser.readLine();

outToServer.writeBytes(sentence + '\n'); // envia a string ao servidor

modifiedSentence = inFromServer.readLine(); // ler string que veio do servidorSystem.out.println("FROM SERVER: " + modifiedSentence);clientSocket.close();

} }

Page 9: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

9

Programação de Socket TCP - Serverimport java.io.*;import java.net.*;

class TCPServer {

public static void main(String argv[]) throws Exception {String clientSentence;String capitalizedSentence;ServerSocket welcomeSocket = new ServerSocket(8000); //cria porta de entrada de numero 8000

while(true) {Socket connectionSocket = welcomeSocket.accept(); // Aguardando no socket de entrada, um contato do cliente // para criar nova porta dedicada ao cliente especifico

BufferedReader inFromClient = // cria Stream de entrada (vindo do Cliente) junto ao socket de conexnew BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));

DataOutputStream outToClient = //cria Stream de saida (do Servidor pro cliente) junto ao socket de conxnew DataOutputStream(connectionSocket.getOutputStream());

clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n';outToClient.writeBytes(capitalizedSentence); //envia String para o cliente}

} }

Page 10: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

10

Programação de Socket UDP - Client

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

class UDPClient {

public static void main(String args[]) throws Exception {BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));DatagramSocket clientSocket = new DatagramSocket();InetAddress IPAddress = InetAddress.getByName("hostname");byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];String sentence = inFromUser.readLine();sendData = sentence.getBytes();DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9000);clientSocket.send(sendPacket);DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);clientSocket.receive(receivePacket);String modifiedSentence = new String(receivePacket.getData());System.out.println("FROM SERVER:" + modifiedSentence);clientSocket.close();} }

Page 11: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

11

Programação de Socket UDP - Server

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

class UDPServer {

public static void main(String args[]) throws Exception {DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];byte[] sendData = new byte[1024];

while(true) {DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);serverSocket.receive(receivePacket);String sentence = new String(receivePacket.getData());InetAddress IPAddress = receivePacket.getAddress();int port = receivePacket.getPort();String capitalizedSentence = sentence.toUpperCase();sendData = capitalizedSentence.getBytes();DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);serverSocket.send(sendPacket);} } }

Page 12: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

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/~ejgcs/comunicacao no link [Aulas]

12

Desenvolver um servidor Web...

Page 13: Infra-Estrutura de Comunicação (IF678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

13

Exemplo – O que deve ser feitoRequisição (via browser ou

telnet)

GET /index.html HTTP/1.0Host: localhost

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)

GET /img2.png HTTP/1.0Host: localhost

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) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms87@gmail.com)hsms87@gmail.com Original por: Flávio

14

Referências1. 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