InfraEstrutura de Comunicao IF 678 Aula Prtica 02

  • Slides: 14
Download presentation
Infra-Estrutura de Comunicação (IF 678) Aula Prática 02 Programação de Sockets TCP e UDP

Infra-Estrutura de Comunicação (IF 678) Aula Prática 02 Programação de Sockets TCP e UDP Hugo Simões (hsms 87@gmail. com) Original por: Flávio Almeida (faas@cin. ufpe. br) Professor: Paulo Gonçalves (pasg@cin. ufpe. br) CIn/UFPE

Importante: Cadastro no grupo da disciplina: • http: //groups. google. com. br/group/infracomunicao 2008 -1/subscribe

Importante: Cadastro no grupo da disciplina: • http: //groups. google. com. br/group/infracomunicao 2008 -1/subscribe

Nosso objetivo: q Revisão sobre Socket q Programação de Sockets TCP e UDP q

Nosso objetivo: q Revisão sobre Socket q Programação de Sockets TCP e UDP q Desenvolver um servidor Web 3

Agenda 1. 2. 3. 4. Comunicação entre processos Programação de Socket TCP Programação de

Agenda 1. 2. 3. 4. Comunicação entre processos Programação de Socket TCP Programação de Socket UDP Desenvolver um servidor Web. . . 4

Comunicação entre processos q Processos em hosts distintos comunicam-se por meio de envio de

Comunicação entre processos q Processos em hosts distintos comunicam-se por meio de envio de mensagens. . . q 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) 5

Interação dos programas cliente e servidor (TCP) [1/2] 1. Cliente tem a tarefa de

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)

Interação dos programas cliente e servidor (TCP) [2/2] 4. TCP cliente inicia uma apresentação

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

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

Programação de Socket TCP - Client import java. io. *; import java. net. *; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modified. Sentence; Buffered. Reader in. From. User = // cria Stream de entrada (teclado) new Buffered. Reader(new Input. Stream. Reader(System. in)); Socket client. Socket = new Socket("hostname", 8000); // cria Socket Cliente, conecta ao servidor Data. Output. Stream out. To. Server = // cria Stream de saida(do cliente pro servidor) new Data. Output. Stream(client. Socket. get. Output. Stream()); // junto ao socket cliente Buffered. Reader in. From. Server =new Buffered. Reader(new Input. Stream. Reader(client. Socket. get. Input. Stream())); // cria Stream de entrada (vindo servidor) // junto ao socket cliente sentence = in. From. User. read. Line(); out. To. Server. write. Bytes(sentence + 'n'); // envia a string ao servidor modified. Sentence = in. From. Server. read. Line(); // ler string que veio do servidor System. out. println("FROM SERVER: " + modified. Sentence); client. Socket. close(); } } 8

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

Programação de Socket TCP - Server import java. io. *; import java. net. *; class TCPServer { public static void main(String argv[]) throws Exception { String client. Sentence; String capitalized. Sentence; Server. Socket welcome. Socket = new Server. Socket(8000); //cria porta de entrada de numero 8000 while(true) { Socket connection. Socket = welcome. Socket. accept(); // Aguardando no socket de entrada, um contato do cliente // para criar nova porta dedicada ao cliente especifico Buffered. Reader in. From. Client = // cria Stream de entrada (vindo do Cliente) junto ao socket de conex new Buffered. Reader(new Input. Stream. Reader(connection. Socket. get. Input. Stream())); Data. Output. Stream out. To. Client = //cria Stream de saida (do Servidor pro cliente) junto ao socket de conx new Data. Output. Stream(connection. Socket. get. Output. Stream()); client. Sentence = in. From. Client. read. Line(); capitalized. Sentence = client. Sentence. to. Upper. Case() + 'n'; out. To. Client. write. Bytes(capitalized. Sentence); //envia String para o cliente } } } 9

Programação de Socket UDP - Client import java. io. *; import java. net. *;

Programação de Socket UDP - Client import java. io. *; import java. net. *; class UDPClient { public static void main(String args[]) throws Exception { Buffered. Reader in. From. User = new Buffered. Reader(new Input. Stream. Reader(System. in)); Datagram. Socket client. Socket = new Datagram. Socket(); Inet. Address IPAddress = Inet. Address. get. By. Name("hostname"); byte[] send. Data = new byte[1024]; byte[] receive. Data = new byte[1024]; String sentence = in. From. User. read. Line(); send. Data = sentence. get. Bytes(); Datagram. Packet send. Packet = new Datagram. Packet(send. Data, send. Data. length, IPAddress, 9000); client. Socket. send(send. Packet); Datagram. Packet receive. Packet = new Datagram. Packet(receive. Data, receive. Data. length); client. Socket. receive(receive. Packet); String modified. Sentence = new String(receive. Packet. get. Data()); System. out. println("FROM SERVER: " + modified. Sentence); client. Socket. close(); } } 10

Programação de Socket UDP - Server import java. io. *; import java. net. *;

Programação de Socket UDP - Server import java. io. *; import java. net. *; class UDPServer { public static void main(String args[]) throws Exception { Datagram. Socket server. Socket = new Datagram. Socket(9876); byte[] receive. Data = new byte[1024]; byte[] send. Data = new byte[1024]; while(true) { Datagram. Packet receive. Packet = new Datagram. Packet(receive. Data, receive. Data. length); server. Socket. receive(receive. Packet); String sentence = new String(receive. Packet. get. Data()); Inet. Address IPAddress = receive. Packet. get. Address(); int port = receive. Packet. get. Port(); String capitalized. Sentence = sentence. to. Upper. Case(); send. Data = capitalized. Sentence. get. Bytes(); Datagram. Packet send. Packet = new Datagram. Packet(send. Data, send. Data. length, IPAddress, port); server. Socket. send(send. Packet); } } } 11

Desenvolver um servidor Web. . . q Trata-se de um servidor Web, que responderá

Desenvolver um servidor Web. . . q Trata-se de um servidor Web, que responderá a requisições HTTP, bastante simples. Com as seguintes regras: q Deve ser implementado utilizando-se a API de Java q Ele deve manipular apenas uma requisição HTTP; q Ele deve enviar uma mensagem de resposta ao cliente contendo linhas de cabeçalho e o objeto desejado, se existente; q A única verificação necessária é quando o objeto não for encontrado, deve-se retornar: “HTTP/1. 0 404 Not Found” q Teste seu servidor utilizando um navegador qualquer! q Mantenha os arquivos que serão baixados na mesma pasta do seu projeto ØDicas: - utilize as classes Server. Socket, String. Tokenizer e File - reveja a aula sobre HTTP - consulte o RFC[2616] - baixar código parcial em www. cin. ufpe. br/~faas/comunicacao no link [Aulas] 12

Exemplo – O que deve ser feito Requisição (via browser ou telnet) GET /index.

Exemplo – O que deve ser feito Requisição (via browser ou telnet) GET /index. html HTTP/1. 0 Host: localhost GET /img 2. png HTTP/1. 0 Host: localhost Resposta (seu servidor) HTTP/1. 0 200 OK Content-Language: pt-BR Content-Length: 53 Content-Type: text/html Connection: close CRLF “enter” dados. . . HTTP/1. 0 200 OK Content-Language: pt-BR Content-Length: 733 Content-Type: image/png Connection: close CRLF “enter” dados. . . 13

Referências 1. 2. 3. 4. 5. James F. Kurose and Keith W. Ross, "Redes

Referências 1. 2. 3. 4. 5. James F. Kurose and Keith W. Ross, "Redes de Computadores e a Internet - Uma Nova Abordagem", 3 a. edição - 2005 - Ed. Addison Wesley BRA http: //www. rfc. net/ http: //www. ietf. org/rfc. html http: //java. sun. com/j 2 se/1. 5. 0/docs/api/java/net/packagesummary. html http: //java. sun. com/j 2 se/1. 5. 0/docs/api/java/net/Socket. html 14