Redes de Computadores I Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Programação com sockets • Meta: aprender construir aplicação cliente/servidor que se comunica usando Uma interface (uma sockets. “porta”), local ao hospedeiro, criada por e pertencente à aplicação, e controlado pelo SO, através da qual um processo de aplicação pode tanto enviar como receber mensagens de/para outro processo de aplicação (remoto ou local) Redes de Computadores I – Prof. Mateus Raeder Programação com sockets usando TCP • Socket: uma porta entre o processo de aplicação e um protocolo de transporte fim-a-fim (UDP ou TCP) • Serviço TCP: transferência confiável de bytes de um processo para outro controlled by application developer controlled by operating system process process socket TCP with buffers, variables socket TCP with buffers, variables host or server internet controlled by application developer controlled by operating system host or server Redes de Computadores I – Prof. Mateus Raeder Programação com sockets usando TCP Cliente deve contactar o servidor: – processo servidor já deve estar executando antes de ser contactado – servidor deve ter criado socket (porta) que aceita o contato do cliente Cliente contata o servidor: – criando um socket TCP – especificando endereço IP e número da porta do processo servidor Quando o cliente cria o socket: cliente TCP estabelece conexão com o TCP do servidor TCP fornece a transferência confiável, entre o cliente e o servidor ponto de vista da aplicação Redes de Computadores I – Prof. Mateus Raeder Programação com sockets usando TCP doUsuario doServidor • Input strem: sequencia de bytes para dentro do processo • Output stream: sequencia de bytes para fora do processo ParaServid or Exemplo de aplicação clienteservidor: • Cliente lê linha da entrada padrão (fluxo doUsuário), envia para servidor via socket (fluxo paraServidor). • Servidor converte linha para letra maiúscula, e devolve para o cliente. • Cliente lê linha modificada do socket (fluxo doServidor), imprime-a Socket do cliente Redes de Computadores I – Prof. Mateus Raeder Interações cliente/servidor com socket: TCP Redes de Computadores I – Prof. Mateus Raeder Exemplo: cliente Java TCP (1) Contém classe para streams de I/O Cria fluxo de entrada Cria socket de cliente, conexão ao servidor Contém classes para import java.io.*; suporte a rede import java.net.*; class ClienteTCP { public static void main(String argv[]) throws Exception { String frase; String fraseModificada; BufferedReader doUsuario = new BufferedReader(new InputStreamReader(System.in)); Socket socketCliente = new Socket(”idHosp", 6789); DataOutputStream paraServidor = new DataOutputStream(socketCliente.getOutputStream()); Cria fluxo de saída anexado ao socket Redes de Computadores I – Prof. Mateus Raeder Exemplo: cliente Java TCP (2) Cria fluxo de entrada ligado ao socket Envia linha ao servidor Lê linha do servidor BufferedReader doServidor = new BufferedReader(new InputStreamReader(socketCliente.getInputStream())); frase = doUsuario.readLine(); paraServidor.writeBytes(frase + '\n'); fraseModificada = doServidor.readLine(); System.out.println(”Do Servidor: " + fraseModificada); socketCliente.close(); } } Redes de Computadores I – Prof. Mateus Raeder Exemplo: servidor Java TCP (1) Cria socket para recepção na porta 6789 Aguarda, no socket para recepção, o contato do cliente import java.io.*; import java.net.*; class servidorTCP { public static void main(String argv[]) throws Exception { String fraseCliente; String fFraseMaiusculas; ServerSocket socketRecepcao = new ServerSocket(6789); while(true) { Socket socketConexao = socketRecepcao.accept(); BufferedReader doCliente = new BufferedReader(new InputStreamReader(socketConexao.getInputStream())); Cria fluxo de entrada, ligado ao socket Redes de Computadores I – Prof. Mateus Raeder Exemplo: servidor Java TCP (2) Cria fluxo de saída, ligado ao socket Lê linha do socket Escreve linha para o socket DataOutputStream paraCliente = new DataOutputStream(socketConexão.getO utputStream()); fraseCliente= doCliente.readLine(); fraseEmMaiusculas= fraseCliente.toUpperCase() + '\n'; paraClient.writeBytes(fraseEmMaiuscul as); } } } Final do laço while. Volta ao início e aguarda conexão de outro cliente Redes de Computadores I – Prof. Mateus Raeder