Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouFelipe Matheus Alterado mais de 9 anos atrás
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 Almeida (faas@cin.ufpe.br)faas@cin.ufpe.br Professor: Paulo Gonçalves (pasg@cin.ufpe.br)pasg@cin.ufpe.br CIn/UFPE
2
Importante: Cadastro no grupo da disciplina: http://groups.google.com.br/group/infra- comunicao2008-1/subscribehttp://groups.google.com.br/group/infra- comunicao2008-1/subscribe
3
3 Nosso objetivo: Revisão sobre Socket Programação de Sockets TCP e UDP Desenvolver um servidor Web
4
4 Agenda 1.Comunicação entre processos 2.Programação de Socket TCP 3.Programação de Socket UDP 4.Desenvolver um servidor Web...
5
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)
6
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)
7
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
8
8 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 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(new InputStreamReader(clientSocket.getInputStream())); // cria Stream de entrada (vindo servidor) // junto ao socket cliente sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); // envia a string ao servidor modifiedSentence = inFromServer.readLine(); // ler string que veio do servidor System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); }
9
9 Programação de Socket TCP - Server import 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 conex new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); DataOutputStream outToClient = //cria Stream de saida (do Servidor pro cliente) junto ao socket de conx new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); //envia String para o cliente }
10
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(); }
11
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); }
12
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]www.cin.ufpe.br/~ejgcs/comunicacao 12 Desenvolver um servidor Web...
13
13 Exemplo – O que deve ser feito Requisição (via browser ou telnet) GET /index.html 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... Requisição (via browser ou telnet) GET /img2.png HTTP/1.0 Host: localhost Resposta (seu servidor) HTTP/1.0 200 OK Content-Language: pt-BR Content-Length: 733 Content-Type: image/png Connection: close CRLF “enter” dados...
14
14 Referê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/http://www.rfc.net/ 3.http://www.ietf.org/rfc.htmlhttp://www.ietf.org/rfc.html 4.http://java.sun.com/j2se/1.5.0/docs/api/java/net/package- summary.htmlhttp://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.htmlhttp://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.