1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java - problema com aplicação cliente - servidor

Discussão em 'Programação' iniciada por The Dealer, 21 de Abril de 2009. (Respostas: 3; Visualizações: 1324)

  1. The Dealer

    The Dealer Power Member

    Estou com um problema na minha aplicação:

    Código:
    import java.io.*; 
    import java.net.*; 
     
    class Servidor { 
        public static void main(String[] args)  { 
     
     
    try{ 
        // cria socket de comunicacao com os clientes  
            ServerSocket s = new ServerSocket(51000); 
             
        while (true) { 
            System.out.println("Servidor a espera"); 
            // espera conexao de algum cliente 
            Socket connectionSocket = s.accept(); 
     
            // cria streams de entrada e saida com o cliente que chegou 
             
            //stream para receber 
            BufferedReader br = 
                    new BufferedReader(new InputStreamReader(connectionSocket. 
                    getInputStream())); 
             
            // stream para enviar 
            PrintWriter pr = new PrintWriter(connectionSocket.getOutputStream()); 
             
            //envia stream 
            pr.println("Ola sou o servidor"); 
             
            //recebe e mostra no ecra 
            System.out.println(br.readLine()); 
             
            //envia a stream 
            pr.println("Sou o Tiago"); 
             
            //recebe e mostra no ecra 
            System.out.println(br.readLine()); 
             
            pr.close(); 
            br.close(); 
            s.close(); 
        } 
    }catch(IOException e){ 
    System.out.println(e.getMessage()); 
     
    } 
        } 
    }
    Código:
    //Aplicacao Cliente 
     
    package Aula3; 
     
    import java.net.*; 
    import java.io.*; 
     
     
     
    class Cliente { 
     
        public Cliente(){ 
            try { 
     
                Socket sc = new Socket("127.0.0.1", 51000); 
                InputStream is = sc.getInputStream(); 
                 
                // stream para receber 
                BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
                 
                //stream para enviar 
                PrintWriter pr = new PrintWriter(sc.getOutputStream(), true); 
                 
                //stream para receber 
                System.out.println(br.readLine()); 
                 
                //stream para enviar 
                pr.println(" Ola, eu sou o cliente"); 
                 
                //stream para receber e mostrar no ecra 
                System.out.println(br.readLine()); 
                 
                // para enviar 
                pr.println("Cliente: Continuo por aqui"); 
                 
                pr.close(); 
                is.close(); 
                sc.close(); 
            } 
            catch (IOException e){ 
                System.out.println( e.getMessage()); 
            } 
        } 
        public static void main (String args[]){ 
            Cliente c=new Cliente(); 
        } 
    } 
    
    O problema é que ele não passa as streams para lado nenhum. No servidor está sempre "à espera" e no cliente não aparece nada. Qual poderá ser o problema?
     
  2. The Dealer

    The Dealer Power Member

    Tinha-me esquecido do true no PrintWriter no servidor :)
     
  3. nsilvio

    nsilvio Power Member

    Ola,

    Adiciona "pr.flush();" a seguir a cada um dos "pr.println(...)"

    Nuno
     
  4. bmpv666

    bmpv666 Power Member

    isso em princípio deve funcionar.

    só te aconselho a colocar as seguintes linhas:

    Código:
     pr.close(); 
     is.close(); 
     sc.close();
    
    dentro de um bloco finally. as boas práticas ditam que todos os recursos devem ser libertados dentro de blocos finally, uma vez que independentemente do que acontecer durante a execução, o código dentro destes blocos é SEMPRE executado!

    ficarias com algo assim:

    Código:
    try {
    ...
    } catch (...) {
    ...
    } finally {
     if(pr != null)  
        pr.close(); 
    if(is != null) 
        is.close(); 
    if(sc != null)
        sc.close();
    }
    
     

Partilhar esta Página