1 / 14

Infra-Estrutura de Comunicação (IF678)

Infra-Estrutura de Comunicação (IF678). Bruno Gentilini Eduardo Souza Amora Albuquerque . Anália Lima Cleivson Siqueira Ivan França. Aula Prática 02 Programação de Sockets TCP e UDP. CIn/UFPE. Nosso objetivo: Revisão rápida sobre Socket

dudley
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) Bruno Gentilini Eduardo Souza Amora Albuquerque Anália Lima Cleivson Siqueira Ivan França Aula Prática 02 Programação de Sockets TCP e UDP CIn/UFPE

  2. Nosso objetivo: • Revisão rápida sobre Socket • Programação de Sockets TCP e UDP • Desenvolver um servidor Web

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

  4. 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

  5. Programação de Socket TCP - Client import java.io.*; import java.net.*; import java.util.Scanner; public class TCPclient { public static void main(String[] args) throws Exception { //lendo do teclado String inFromUser = new Scanner(System.in).next(); //criando um socket TCP Socket sock = new Socket("localhost", 2000); //stream de saida DataOutputStream socketOut = new DataOutputStream(sock.getOutputStream()); socketOut.writeBytes(inFromUser + '\n'); //resposta do servidor BufferedReader socketIn = new BufferedReader(new InputStreamReader(sock.getInputStream())); System.out.println(socketIn.readLine()); } }

  6. Programação de Socket TCP - Server importjava.io.*; importjava.net.*; publicclassTCPserver { publicstaticvoidmain(String argv[]) throws Exception { String inFromClient; String outToClient; //socket de "boas vindas" ServerSocketwelcomeSocket = newServerSocket(2000); while(true) { //socket de conexão TCP Socketsock = welcomeSocket.accept(); //buffer de entrada, que recebe um stream BufferedReadersocketIn = newBufferedReader(newInputStreamReader(sock.getInputStream())); inFromClient = socketIn.readLine(); outToClient = inFromClient.toUpperCase() + '\n'; //stream de saida DataOutputStreamsocketOut = newDataOutputStream(sock.getOutputStream());//stream de saida //escrevendo no socket socketOut.writeBytes(outToClient); sock.close(); } } }

  7. Exercício Faça um “Hello [endereço IP do servidor]” e retorne do servidor um “HELLO [endereço IP do cliente]” OBS: O cliente deve fechar a conexão após receber a resposta do servidor ou dar um timeout de 30 segundos.

  8. Programação de Socket UDP - Client importjava.net.*; importjava.util.Scanner; classUDPclient { publicstaticvoidmain(String args[]) throws Exception { String inFromUser = new Scanner(System.in).next() + '\n'; //entrada do usuário DatagramSocketclientSocket = newDatagramSocket(); //socket UDP InetAddressIPServer = InetAddress.getByName("localhost"); //IP do servidor byte[] sendData = new byte[1024]; //dados a serem enviados sendData = inFromUser.getBytes(); //criando o pacote de envio DatagramPacketsendPacket = newDatagramPacket(sendData, sendData.length, IPServer, 5000); clientSocket.send(sendPacket); byte[] receiveData = new byte[1024]; //dados recebidos DatagramPacketreceivePacket = newDatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); //recebendo o pacote String inFromServer = new String(receivePacket.getData()); System.out.println("FROM SERVER: " + inFromServer); clientSocket.close(); } }

  9. Programação de Socket UDP - Server importjava.net.*; classUDPserver { publicstaticvoidmain(String args[]) throws Exception { DatagramSocketserverSocket = newDatagramSocket(5000); byte[] receiveData = new byte[1024] , sendData = new byte[1024]; String inFromClient, outToClient; InetAddressclientIP; intport; while(true) { //pacote a ser recebido DatagramPacketreceivePacket = newDatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); //recebendo o pacotes inFromClient = new String(receivePacket.getData()); //colocando na string os dados recebidos clientIP = receivePacket.getAddress(); //pegando o IP e porta do pacote que chegou port = receivePacket.getPort(); outToClient = inFromClient.toUpperCase(); sendData = outToClient.getBytes(); //enviandopacote de resposta DatagramPacketsendPacket = newDatagramPacket(sendData, sendData.length, clientIP, port); serverSocket.send(sendPacket); } } }

  10. Exercício • Faça, por meio de uma conexão UDP, o cliente enviar dois números e o servidor responder com a soma deles. • OBS: O cliente deve encerrar após receber a resposta do servidor ou dar um timeout de 30 segundos.

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

  12. Exemplo – O que deve ser feito Requisição (via browser ou telnet) telnet: GET /index.html HTTP/1.0 Host: localhost Browser: http://ip:porta 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) telnet: GET /img2.png HTTP/1.0 Host: localhost Browser: http://ip:porta Resposta (seu servidor) HTTP/1.0 200 OK Content-Language: pt-BR Content-Length: 733 Content-Type: image/png Connection: close CRLF “enter” dados ... 12

  13. Exercício do Temporizador • O exercício deverá ser apresentado (pessoalmente) aos monitores. • A data máxima para apresentar será definida Obs: Não mandar emails individualmente para um monitor, pois a dúvida de um pode ser a dúvida de muitos

  14. Exercício do Temporizador(cont.) • Deverá ser desenvolvido um programa que rode em duas máquinas distintas. O programa terá as seguintes funcionalidades: • Os dois hosts (A e B) devem estabelecer uma conexão TCP • O host A deve enviar ao host B um pacote realizando uma solicitação ara a hora do sistema em B • O host A deve receber um pacote do host B com a hora do sistema em B • O host A deve mostrar na tela a hora do sistema em B, e também, o RTT calculado em relação a solicitação • A hora mostrada na tela deve seguir o formato “dd/MM/yyyyhh:mm:ss:ms” IMPORTANTE: • O lado B irá enviar a informação para A na forma de bytes. Não pode transformar a hora do sistema em um Objeto (como String), e utilizar a função writebytes para escrever no pacote • O lado B deve enviar um pacote com tamanho de 8 bytes, suficiente para enviar os 1 long relativos à hora do sistema

More Related