120 likes | 207 Views
Infra-Estrutura de comunicação. Aula Prática Programação de Sockets TCP e UDP. Anália Lima ( alc5 ) Bruno Gentilini ( bgda ) Eduardo Souza ( efs ) Ivan França ( ilfn ). Professor: Paulo Gonçalves ( pasg@cin.ufpe.br ) CIn /UFPE. Protocolos Camada Transporte . TCP
E N D
Infra-Estrutura de comunicação Aula Prática Programação de Sockets TCP e UDP Anália Lima (alc5) Bruno Gentilini (bgda) Eduardo Souza (efs) Ivan França (ilfn) Professor: Paulo Gonçalves (pasg@cin.ufpe.br) CIn/UFPE
Protocolos Camada Transporte • TCP • Orientado à conexão; • Transporte confiável; • Controle de fluxo; • Controle de congestionamento; • UDP • Não orientado à conexão;
Comunicação entre processos • Processos em hosts distintos comunicam-se por meio de envio de mensagens... • enviadas e recebidas através de seu socket • O que é um socket?
O que é um socket? • Socket é a interface entre a camada de aplicação e a de transporte
Programação de socket TCP- Client importjava.io.*; importjava.net.*; importjava.util.Scanner; publicclassTCPclient { publicstaticvoidmain(String[] args) throws Exception { //lendo do teclado String inFromUser = new Scanner(System.in).next(); //criando um socket TCP Socketsock = newSocket("localhost", 2000); //stream de saida DataOutputStreamsocketOut = newDataOutputStream(sock.getOutputStream()); socketOut.writeBytes(inFromUser + '\n'); //resposta do servidor BufferedReadersocketIn = newBufferedReader(newInputStreamReader(sock.getInputStream())); System.out.println(socketIn.readLine()); } }
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(); } } }
Exercício • Faça um “Hello [endereço IP do servidor]” e retorne do servidor um “Ok [endereço IP do cliente]”
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.
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(); } }
Programação de socketUDP-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); } } }
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.
Referências • James F. Kuroseand Keith W. Ross, "Redes de Computadores e a Internet - Uma Nova Abordagem", 3a. edição - 2005 - Ed. Addison Wesley BRA • Slides anteriores da monitoria feitos por flávioalmeida (faas).