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 s Java Prof. Helcio Wagner da Silva
Introdução Cliente TCP IP Servidor TCP IP Host/rede Host/rede 2
Tipos de s (TCP) de entrada Abertura de conexão Cliente do cliente 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 Fluxo de entrada soquetedocliente TCP p/ o Nível do Nível 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 docliente Fluxo de saída paraocliente TCP soquetedeentrada soquetedeconexao TCP do Nível do Nível p/ o Nível 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 s (UDP) do cliente do servidor Cliente Bytes Bytes Servidor 9
O Cliente UDP - esquema Fluxo de entrada Estrutura de dados dousuario pctedeenvio Cliente pctederecepcao Estrutura de dados soquetedocliente UDP p/ o Nível do Nível 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 Estrutura de dados pctederecepcao Servidor pctedeenvio Estrutura de dados soquetedoservidor UDP do Nível p/ o Nível 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