UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Redes de Computadores I Desenvolvimento de Aplicações de Rede a partir da Biblioteca de Soquetes Java Prof. Helcio Wagner da Silva Introdução Cliente Servidor Soquete Soquete TCP TCP IP IP Host/rede Host/rede 2 Tipos de Soquetes (TCP) Soquete de entrada Abertura de conexão Cliente Soquete do cliente Soquete de conexão Servidor Bytes Bytes 3 Requisitos das Aplicações-exemplo 1. O Cliente lê uma linha de sua entrada padrão (teclado) e a envia para o Servidor 2. O Servidor lê a linha a partir de seu soquete de conexão 3. O Servidor converte a linha para letras maiúsculas 4. O Servidor envia a linha ao Cliente através de seu soquete de conexão 5. O Cliente lê a linha modificada através de seu soquete e apresenta a linha na sua saída padrão (monitor) 4 O Cliente TCP - esquema Fluxo de entrada doUsuario Cliente Fluxo de saída paraOServidor doServidor soqueteDoCliente p/ o Nível de Transporte do Nível de Transporte Fluxo de entrada Soquete TCP 5 O Cliente TCP - código import java.io.*; import java.net.*; public class ClienteTCP { public static void main(String[] args) throws Exception { String sentenca; String sentencaMod; BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in)); Socket soqueteDoCliente = new Socket(args[0],6789); DataOutputStream paraOServidor = new DataOutputStream(soqueteDoCliente.getOutputStream()); BufferedReader doServidor = new BufferedReader(new InputStreamReader( soqueteDoCliente.getInputStream())); sentenca = doUsuario.readLine(); paraOServidor.writeBytes(sentenca + ‘\n’); sentencaMod = doServidor.readLine(); System.out.println(“Do servidor: “ + sentencaMod); soqueteDoCliente.close(); } } 6 O Servidor TCP - esquema Núcleo de Execução do Serviço Servidor Fluxo de entrada Fluxo de saída doCliente Soquete TCP soqueteDeEntrada do Nível de Transporte paraOCliente soqueteDeConexao do Nível de Transporte p/ o Nível de Transporte Soquete TCP 7 O Servidor TCP - código import java.io.*; import java.net.*; public class ServidorTCP { public static void main(String[] args) throws Exception { String sentenca; String sentencaMod; ServerSocket soqueteDeEntrada = new ServerSocket(6789); while (true) { Socket soqueteDeConexao = soqueteDeEntrada.accept(); BufferedReader doCliente = new BufferedReader(new InputStreamReader( soqueteDeConexao.getInputStream())); DataOutputStream paraOCliente = new DataOutputStream(soqueteDeConexao.getOutputStream()); sentenca = doCliente.readLine(); sentencaMod = sentenca.toUpperCase() + ‘\n’; paraOCliente.writeBytes(sentencaMod); } } } 8 Tipos de Soquetes (UDP) Soquete do cliente Cliente Soquete do servidor Bytes Bytes Servidor 9 O Cliente UDP - esquema Fluxo de entrada doUsuario Cliente Estrutura de dados pcteDeEnvio pcteDeRecepcao soqueteDoCliente p/ o Nível de Transporte do Nível de Transporte Estrutura de dados Soquete UDP 10 O Cliente UDP - código import java.io.*; import java.net.*; public class ClienteUDP { public static void main(String[] args) throws Exception { String sentenca, sentencaMod; BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket soqueteDoCliente = new DatagramSocket(); InetAddress endIP = InetAddress.getByName(args[0]); byte[] dadosDeEnvio = new byte[1024]; byte[] dadosDeRecepcao = new byte[1024]; sentenca = doUsuario .readLine(); dadosDeEnvio = sentenca.getBytes(); DatagramPacket pcteDeEnvio = new DatagramPacket(dadosDeEnvio,dadosDeEnvio.length,endIP,9876); soqueteDoCliente.send(pcteDeEnvio); DatagramPacket pcteDeRecepcao = new DatagramPacket(dadosDeRecepcao,dadosDeRecepcao.length); soqueteDoCliente.receive(pcteDeRecepcao); sentencaMod = new String(pcteDeRecepcao.getData()); System.out.println(“Do servidor: “ + sentencaMod); soqueteDoCliente.close(); } } 11 O Servidor UDP - esquema Núcleo de Execução do Serviço Servidor Estrutura de dados pcteDeRecepcao pcteDeEnvio soqueteDoServidor do Nível de Transporte p/ o Nível de Transporte Estrutura de dados Soquete UDP 12 O Servidor UDP - código import java.io.*; import java.net.*; public class ServidorUDP { public static void main(String[] args) throws Exception { String sentencaMod; DatagramSocket soqueteDoServidor = new DatagramSocket(9876); byte[] dadosDeRecepcao = new byte[1024]; byte[] dadosDeEnvio = new byte[1024]; while (true) { DatagramPacket pcteDeRecepcao = new DatagramPacket(dadosDeRecepcao,dadosDeRecepcao.length); soqueteDoServidor.receive(pcteDeRecepcao); sentencaMod = (new String(pcteDeRecepcao.getData())).toUpperCase(); InetAddress endIP = pcteDeRecepcao.getAddress(); int port = pcteDeRecepcao.getPort(); dadosDeEnvio = sentencaMod.getBytes(); DatagramPacket pcteDeEnvio = new DatagramPacket(dadosDeEnvio,dadosDeEnvio.length,endIP,port); soqueteDoServidor.send(pcteDeEnvio); } } } 13