1 / 16

Socket em Java

Socket em Java. Servidor. import java.io.*; import java.net.*; public class Servidor { public static void main( String args[] ) throws Exception { //Escutar a porta 6789 ServerSocket server = new ServerSocket( 6789 ); //Espera uma conexão

winter
Download Presentation

Socket em Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Socket em Java

  2. Servidor import java.io.*; import java.net.*; public class Servidor { public static void main( String args[] ) throws Exception { //Escutar a porta 6789 ServerSocket server = new ServerSocket( 6789 ); //Espera uma conexão Socket cliente = server.accept(); // -------------------------- // RECEBE UM DADO DO CLIENTE InputStream input = cliente.getInputStream(); int valor = input.read(); // Mostrar o valor na tela System.out.println( "valor: " + valor ); //Fechar a conexão input.close(); cliente.close(); server.close(); } } Limitação: ele recebe apenas 1 cliente e depois para a conexão;

  3. Cliente import java.io.*; import java.net.*; public class Cliente { public static void main( String args[] ) throws Exception { //Abrir a conexao com o servidor Socket socket = new Socket( "127.0.0.1" , 6789 ); // -------------------------- // ENVIAR UM DADO OutputStream output = socket.getOutputStream(); output.write( 127 ); //Fechar a conexão com o servidor output.close(); socket.close(); } }

  4. 1° melhoramento servidor pode receber mais clientes

  5. Servidor public class Servidor{ Private static boolean executar = true; public static void main( String args[] ) throws Exception{ //Escutar a porta 6789 ServerSocket server = new ServerSocket( 6789 ); while( executar ){ //Espera uma conexão Socket cliente = server.accept(); // -------------------------- // RECEBE UM DADO DO CLIENTE InputStream input = cliente.getInputStream(); int valor = input.read(); //Mostrar o valor na tela System.out.println( "valor: " + valor ); //Fechar a conexão input.close(); cliente.close(); } server.close(); } } Limitação: ele recebe apenas 1 cliente por vez;

  6. 2° melhoramento servidor pode atender clientes simultaneamente

  7. Servidor import java.net.*; import java.util.concurrent.*; public class Servidor{ Private static boolean executar = true; public static void main( String args[] ) throws Exception{ //Escutar a porta 6789 ServerSocket server = new ServerSocket( 6789 ); ExecutorService pool = Executors.newCachedThreadPool(); while( executar ){ //Espera uma conexão Socket cliente = server.accept(); //Atender o cliente em um Thread pool.submit( new AtenderClienteRunnable( cliente ) ); } server.close(); } }

  8. Servidor( continuação... ) import java.io.InputStream; import java.net.Socket; public class AtenderClienteRunnable implements Runnable { private Socket cliente; public AtenderClienteRunnable(Socket cliente) { this.cliente = cliente; } @Override public void run() { Try { // -------------------------- // RECEBE UM DADO DO CLIENTE InputStream input = cliente.getInputStream(); int valor = input.read(); // Mostrar o valor na tela System.out.println( "valor: " + valor ); //Fechar a conexao com o cliente input.close(); cliente.close(); } catch(Exception err) { err.printStackTrace(); } } }

  9. 3° melhoramento Facilidades do Java

  10. Facilidades • Utilizar o OutputStream e o InputStream é a maneira mais baixo nível de comunicação; • Enviar e receber bytes; • O java permite enviar e receber um objeto, de forma fácil e rápida; • Basta criar uma instancia do ObjectOuputStream e ObjectInputStream;

  11. Servidor @Override public void run() { Try { // -------------------------- // RECEBE UM DADO DO CLIENTE InputStream input = cliente.getInputStream(); ObjectInputStream ois = new ObjectInputStream( input ); Protocolo protocolo = (Protocolo) ois.readObject(); // Mostrar o valor na tela System.out.println( protocolo.toString() ); System.out.println( "------------------" ); //Fechar a conexao com o cliente input.close(); cliente.close(); } catch(Exception err) { err.printStackTrace(); } }

  12. Cliente public class ClienteObjeto { public static void main( String args[] ) throws Exception { //Abrir a conexao com o servidor Socket socket = new Socket( "127.0.0.1" , 6789 ); // -------------------------- // ENVIAR UM DADO OutputStream output = socket.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( output ); Protocolo protocolo = new Protocolo(); protocolo.setId( 1 ); protocolo.setMetodo( "somar" ); protocolo.setParam1( 10 ); protocolo.setParam2( 20 ); oos.writeObject( protocolo ); //Fechar a conexao com o servidor output.close(); socket.close(); } }

  13. … onde eu quero chegar com isso: o cliente apenas envia e o servidor apenas recebe. Deste modo, o exercício de vocês é fazer com o que o cliente espere e mostre na tela a resposta do servidor.

  14. Exercício • objetivo: Validar um CPF ou CNPJ no servidor • O cliente envia um CPF ou CNPJ para o servidor • O servidor recebe o dado, processa e retorna uma resposta • true: caso o CPF ou CNPJ seja válido • False: caso o CPF ou CNPJ seja inválido • O cliente deve mostrar a resposta na tela • O Servidor deve: • Receber vários clientes (use while logo após abrir a porta); • de forma simultânea (use Thread); • Se tiver código igual, nenhum dos grupos irá receber a nota;

  15. Exercício • Adicionar ou modificar um objeto usuário no servidor • O cliente envia o objeto usuário e qual ação deve fazer • O servidor processa e retorna: • true: caso tenha feito com sucesso • False: caso acontecer alguma falha • O cliente deve esperar e imprimir na tela a resposta do servidor

  16. Avisos • Em trio! • Devem enviar por e-mail (avld@cin.ufpe.br) o trabalho no dia 13/04; • Vale 3 pontos; • Não receberam pontos caso haja 2 ou mais trabalhos iguais;

More Related