1 / 14

Infra-Estrutura de Comunicação (IF678)

Infra-Estrutura de Comunicação (IF678). Aula Prática 02 Programação de Sockets TCP e UDP. Hugo Simões ( hsms87@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:

clive
Télécharger la présentation

Infra-Estrutura de Comunicação (IF678)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Importante: Cadastro no grupo da disciplina: • http://groups.google.com.br/group/infra-comunicao2008-1/subscribe

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

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

  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 socketdedicado àquele cliente  Ao final da apresentação, existe uma conexão TCP entre o socket cliente e o novo socket do servidor

  8. 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(); } } Programação de Socket TCP - Client

  9. 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 } } } Programação de Socket TCP - Server

  10. 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(); } } Programação de Socket UDP - Client

  11. 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); } } } Programação de Socket UDP - Server

  12. Desenvolver um servidor Web... • 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]

  13. 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 ... Exemplo – O que deve ser feito 13

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

More Related