CENTRO UNIVERSITÁRIO DO TRIÂNGULO INTERNET E REDES DE COMPUTADORES APLICAÇÕES DE REDES DE COMPUTADORES TCP/IP Exemplificando a camada de transporte através de aplicações cliente / servidor O conceito cliente / servidor não é restrito a imagem que fazemos frequentemente de computadores que apresentam características estruturais diferentes, originando uma verdadeira separação entre os equipamentos que são clientes e outros que são servidores. O que existe, de fato, são computadores rodando aplicações clientes e computadores rodando aplicações servidoras. Para estabelecer uma relação deste tipo, é preciso que o servidor seja iniciado e permaneça em loop (listening) aguardando um pedido de conexão. O cliente deve conhecer o endereço (número IP) deste servidor e a porta reservada a aplicação. A ligação virtual estabelecida entre cliente e servidor é chamada de socket. Se vários clientes estão utilizando o mesmo serviço, para cada um deles existe um socket exclusivo. Os dois programas que serão apresentados em seguida, formam um exemplo simples de uma aplicação servidor (TCP/IP) e vários clientes. // Programa servidor import java.net.*; import java.io.*; import java.lang.*; class serv2 { ConexBasica cb; public serv2(int port) { System.out.println("Servidor listening na porta: "+port); cb = new ConexBasica(port); cb.start(); } public static void main(String args[]) { new serv2(4321); } Porta do serviço } class ConexBasica extends Thread { int pt; ServerSocket ssocket; Conexsec csec; public ConexBasica(int port) { pt = port; } public void run() { try { ssocket = new ServerSocket(pt); } catch(Exception e) { System.err.println(e); System.exit(1); } while(true) { try { Socket clisocket = ssocket.accept(); csec = new Conexsec(clisocket); csec.start(); } catch(Exception e) { System.err.println(e); } } } } class Conexsec extends Thread { Socket csk; PrintStream soutput; DataInputStream sinput; public Conexsec(Socket s) { csk = s; } public void run() { System.out.println("Criada conexao: "+csk.getInetAddress() +":"+csk.getPort()); try { soutput = new PrintStream(csk.getOutputStream()); sinput = new DataInputStream(csk.getInputStream()); while(true) { String str = sinput.readLine(); soutput.println("eco do servidor: "+str); System.out.println(str); if(str.equals("Bye")) { csk.close(); System.out.println("Desconectado: "+csk.getInetAddress() +":"+csk.getPort()+".Listening..."); stop(); } } CENTRO UNIVERSITÁRIO DO TRIÂNGULO INTERNET E REDES DE COMPUTADORES APLICAÇÕES DE REDES DE COMPUTADORES } String str = i1.readLine(); coutput.println(str); String str2 = cinput.readLine(); System.out.println("Recebido do servidor: "+str2); catch(Exception e) { System.err.println(e); } } } =================================== =================================== // Programa cliente import java .net.*; import java.io.*; import java.lang.*; class cli2 { DataInputStream i1; DataInputStream cinput; PrintStream coutput; Socket clisoc; if(str.equals("Bye")) { System.out.println("Desconectado: "+clisoc.getInetAddress() +":"+clisoc.getPort()); clisoc.close(); System.exit(0); } } } catch(Exception e) { System.err.println(e); System.exit(1); } } IP do servidor public cli2() { Porta try { clisoc = new Socket("127.0.0.1", 4321); cinput = new DataInputStream(clisoc.getInputStream()); coutput = new PrintStream(clisoc.getOutputStream()); i1 = new DataInputStream(System.in); public static void main(String args[]) { new cli2(); } } while(true) { System.out.println("Digite uma palavra: "); Procedimento Experimental 1) Para que os programas funcionem é preciso inicialmente compilá-los, usando o Java compiler. Abra uma janela do ms-dos (command) e digite: javac cli.java javac serv.java Obs.: Deverá aparecer uma mensagem (warning) relatando que o método utilizado está depreciado (deprecated), simplesmente ignore. 2) Para executar os programas, abra 2 janelas ms-dos, uma para o cliente e outra para o servidor - Janela do servidor (execute este primeiro): java serv não acrescente a extensão - Janela do cliente: java cli 3) Os testes são simples, o que for digitado na tela do cliente será ecoado no servidor, até que se digite a palavra Bye . 4) Verifique de que forma está ocorrendo a interação cliente servidor, anote os endereços, portas e relate o experimento. 5) Faça alterações no programa para que você estabeleça um chat com seu colega ao lado. 6) Após analisar e anotar os detalhes do experimento, faça um relatório conforme modelo indicado e o entregue impresso no dia 02/09/2005.