[Socktes] Resposta do Servidor

1 resposta
Bruno_Ferreira1

Vi uma dúvida bem parecida com a minha, mas acho que se postasse o código no mesmo tópico iriam reclamar, por isso abri este:

Estou fazendo um exercicio da escola, onde preciso criar um servidor e um cliente usando sockets, o cliente escolhe um tema, e o servidor devolve uma piada sobre o tema.
Ja tentei fazer o básico do básico, só pra se conectar e trocar alguma mensagem, pra depois implementar o exercício. O programa cliente até conecta, mas ai não acontece nada, o programa cliente fica travado, esperando alguma resposta do servidor que não acontece eu não sei porque. Sei que poderia usar treads pro programa não ficar travado, mas gostaria de saber porque o servidor não responde

classe Servidor:

import java.io.*;
import java.net.*;
import javax.swing.*;

public class Servidor {

   public static void main(String args[]) {
   		
   		try {
			//Cria um serviço numa porta específica
   			ServerSocket servidor = new ServerSocket(7000);
   			
			while(true) {
			        //isso aqui aparece no console de saída
				System.out.println("Esperando uma conexão...");
				Socket cliente = servidor.accept();
                                //até aqui funciona
				System.out.println("Cliente conectado...");
				
                                 //Esta parte não esta funcionando, pois não responde nada
				BufferedReader in = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
				PrintWriter out = new PrintWriter(cliente.getOutputStream());				
				System.out.println(in.readLine());
                                out.print("Isso é a resposta do servidor");							
				out.flush();				
				in.close();
				out.close();			
				cliente.close();
			}
   			
   		}
   		catch(Exception e) {
   			System.out.println("ERRO: " + e.toString());
   		}
   }
    
}

Classe cliente:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Main implements ActionListener {

     JComboBox combo;
      JTextField txt;
      JTextArea area;
      JButton botao;

      public Main(){
         String course[] = {"Piadas de Loiras", "Piadas de Português", "Piadas de Papagaio","Piadas de Anão"};
          JFrame frame = new JFrame("Escolhendo a piada");
          botao = new JButton("Procurar");
          JPanel panel = new JPanel();
          combo = new JComboBox(course);
          area=new JTextArea();
          panel.add(combo);
          panel.add(botao);
          panel.add(area);
          frame.add(panel);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setSize(400,400);
          frame.setVisible(true);
          botao.addActionListener(this);
          area.setText("Teste");

      }

       public void actionPerformed(ActionEvent e) {
              if( e.getSource() == botao ) {
                   String 	retorno;
                   Socket conexao = null;
                   try{
                   	while(true){
                           // cria o socket de acesso ao server hostname na porta 7000
                          conexao = new Socket("127.0.0.1", 7000);

                          PrintWriter out = new PrintWriter(conexao.getOutputStream());
                          BufferedReader in = new BufferedReader(new InputStreamReader(conexao.getInputStream()));


                               // envia a linha para o server                          
                                out.print("Testando");
                                out.flush();
                                // lê uma linha do server
                                System.out.println(in.readLine());
                              
                                // fecha o cliente                                
                                in.close();
                                out.close();
                                conexao.close();
                       }
                   }
                   catch(IOException a){
                        System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket: "+a.getMessage());
                    }
                    finally{
                            try{
                                    conexao.close();
                            }
                            catch(IOException f){
                                    System.out.println("Algum problema ocorreu ao tentar fechar o socket."+f.getMessage());
                            }
                    }
               }
         }

    public static void main(String[] args) {
       Main a=new Main();
    }

}

1 Resposta

viniciusalvess

No the Java Tutorial , na parte de socket tem um exemplo chamado Knock Knock Knock se não me engano , é o que precisa !

Criado 29 de agosto de 2011
Ultima resposta 30 de ago. de 2011
Respostas 1
Participantes 2