Olá a todos, estou brincando um pouco com Sockets aqui. Tenho uma aplicação cliente-servidor bem básica onde o cliente se conecta no servidor e este envia mensagens ao cliente. Até ai tudo bem, o que esta ocorrendo é que quando passo meu código para um frame, ele trava. O problema em si ocorre no servidor, cuja conexão não é iniciada. Segue abaixo o código do botão que inicia o servidor:
try{
txtEnviadas.setText("");
txtEnviadas.append("Criando servidor...");
ServerSocket servidor = new ServerSocket(1234);
txtEnviadas.append("\nServidor operando na porta 1234");
while(true){
txtEnviadas.append("=======================================");
txtEnviadas.append(" ESPERANDO CONEXÃO CLIENTE ");
txtEnviadas.append("=======================================");
Socket cliente = servidor.accept();
txtEnviadas.append("Conexão estabelecida por: [ " + cliente.getInetAddress().toString() + " ]");
txtEnviadas.append("Enviando dados...");
ObjectOutputStream saida = new ObjectOutputStream(cliente.getOutputStream());
saida.flush();
saida.writeObject("Conectado ao servidor.");
saida.writeObject("Dados conexao: " + cliente.toString());
saida.writeObject("Saindo...");
txtEnviadas.append("Dados enviados...");
saida.writeObject("EOT");
cliente.close();
txtEnviadas.append("Conexão finalizada.");
}
}
catch(Exception e){
e.printStackTrace();
}
Quando clico nesse botão, o frame trava, tendo eu que finalizar o processo.
O código abaixo foi usado para criar um servidor, mas sem GUI, e funcionou perfeitamente com o cliente:
package principal;
import java.net.*;
import java.io.*;
public class Servidor{
public static void main(String[] args) {
try{
System.out.println("Criando servidor...");
ServerSocket servidor = new ServerSocket(1234);//Indica a porta 1234
System.out.println("Servidor operando na porta 1234.");
while(true){
System.out.println("===Esperando conexão===");
Socket cliente = servidor.accept();//Fica "escutando" uma conexao
System.out.println("Conexão aberta de " + cliente.getInetAddress().toString());
System.out.println("Enviando dados...");
ObjectOutputStream saida = new ObjectOutputStream(cliente.getOutputStream());
saida.flush();
//Dados a serem enviados ao cliente. Quando a classe "Cliente"
//for executada, serão exibidas as mensagens abaixo para o cliente
saida.writeObject("==========================================");
saida.writeObject("Conectado ao servidor.");
saida.writeObject("Dados conexao: " + cliente.toString());
saida.writeObject("Saindo...");
saida.writeObject("==========================================");
System.out.println("Dados enviados.");
saida.writeObject("EOT");
cliente.close();
System.out.println("Conexão encerrada.");
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
Se alguém puder me ajudar, ficarei muito grato.
Boa tarde a todos.