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();
}
}