InfraEstrutura de Comunicao IF 678 Aula Prtica 02
- Slides: 14
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
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 Socket UDP Desenvolver um servidor Web. . . 4
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 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 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. *; 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. *; 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. *; 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. *; 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á 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. 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 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
- Comunição social
- Kingdom 678
- Bsnl bathinda
- What is 789 rounded to the nearest hundred
- 665 vs 678
- Gestp/difl
- Infraestrutura de comunicação de uma rede cow
- Infraestrutura da internet
- Superestrutura e infraestrutura
- Forças produtivas o que é
- Infraestrutura
- Nap cuadernos para el aula
- Resultado x
- Atividade paisagem natural e modificada 2 ano
- Contabilidade aula 1