[RESOLVIDO] Problemas de conexão - sistema chat

Olá!
Olha eu aqui ainda com problemas no meu chat :confused:

Seguinte, no construtor do cliente eu chamo o método conexão.
Segue o método:

public void conexao() throws IOException, UnknownHostException { Socket cliente = new Socket("127.0.0.1", 12345); txtaHistoricoC.append("Nova conexão com o servidor\n"); }
Ao executar recebo a seguinte mensagem de erro:

SEVERE: null java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:189) at fontes.Cliente.conexao(Cliente.java:108) at fontes.Cliente.<init>(Cliente.java:29) at fontes.Cliente$2.run(Cliente.java:116) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Podem me dar help?? :smiley:

Pra vc conseguir conectar, é necessário ter alguém “ouvindo” nesse host e nessa porta.

Pro seu caso, ACHO que vc queria fazer apenas um teste, então antes de rodar essa sua classe, crie outra classe que suba um ServerSocket.
Essa classe ficaria mais ou menos assim:


public class Servidor {
    public static void main(String[] args) {
         new ServerSocket(12345);
    }
}

Basicamente você deve criar um ServerSock(no servidor) e fazer com q ele fique aguardando conexao

ServerSock sock =new ServerSocket(12345);  
 while (true) {
                sock = serverSocket.accept();
               //aqui ficara o q o seu servidor devera fazer..
}

Muito obrigada Lucas e riccaio, era justamente o que estava faltando…
Porém agora surgiu outro problema! Tanto o servidor quanto o cliente são codificados em um jframe, quando executo o servidor ele não aparece nada, não dá erro…Executo o cliente em seguida e aparece a telinha normalmente…

Segue o construtor do Servidor e o método que ele chama:

[code]public Servidor(int porta) throws IOException {

    initComponents();        
    this.porta = porta;
    this.clientes = new ArrayList<PrintStream>();
    this.setLocationRelativeTo(null);
    this.getRootPane().setDefaultButton(btnEnviarS);
    cmbDestino.setEnabled(false);
    cmbDestino.setSelectedItem(null);
    conexao();
}[/code]

[code]public void conexao() throws IOException
{
ServerSocket servidor = new ServerSocket(this.porta);

    while (!encerrar)
    {            
        Socket cliente = servidor.accept();
        txtaConectados.append("Nova conexão com o cliente " + cliente.getInetAddress().getHostAddress() + "\n");            
    }
}[/code]

Lana…
eu não encontrei nenhum erro em seu codigo…

o servidor esta eu um JFrame e o cliente esta no outro?

Lucas,

Sim, cada um em um jframe diferente…Fiz um teste agora (colocando em comentario :roll: ) e descobri que o problema é o while…Já haviam me mostrado que ele poderia entrar em um looping mesmo, agora q lembrei… Mas que outra condição posso colocar para que saia do laço corretamente?

Lana,

pelo q entendi q vc quer…rs

para parar um looping vc pode usar o “break”…

mais vai depender da sua necessidade…pq c vc parar o looping o seu SevrSock vai parar de responder…

se for o caso de vc terminar a conexao q foi aberta, e ficar aguardando uma proxima vc usa o sock.close()

dentro do seu while…

Lucas,

Entendi, se eu parar o loop ele vai parar de aceitar os clientes ne?
Mas pq sera que não aparece o frame?
Se eu coloco assim:

while (!encerrar) { txtaConectados.append("oi"); encerrar = true; }
A telinha aparece!
Mas se eu coloco assim:

while (!encerrar) { Socket cliente = servidor.accept(); txtaConectados.append("Nova conexão com o cliente " + cliente.getInetAddress().getHostAddress() + "\n"); encerrar = true; }
Aí não aparece mais nada :confused:
Então a o frame não aparece se eu não encerrar o while e se eu colocar o “append” certo?
:cry:

Lana…

Acontece que enquanto vc naum parar o looping o processo esta preso nele…entaum a tela naum aparece…
qnd vc encerra o looping o processo continua e exibe o Frame…

ate da pra vc escrever em tela enquanto seu socket trabalha, mais dai vc vai ter q usar thread…

Lucas,

E essa thread, eu coloco no while mesmo? Eu estudei um exemplo em console que faz isso mesmo, coloca uma thread dentro do método que aguarda e aceita os clientes. Essa thread chama um outro método que lê o que o usuário digita no teclado e mostra a mensagem…
Mais simples em console, mas utilizando esses jframes eu devo tentar algo parecido?

Muito obrigada pela disposição em me ajudar :oops:

Lana,

o objetivo do forum é este…estamos aqui pra nos ajudar…rs

entaum…é isso sim…
vc pode criar a thread dentro do while e implementar o metodo abstrado dela…

a logica seria assim…
qnd vc receber a conexao no socket a sua thread é iniciada…e dentro dela vc chama o metodo q escreve na tela…

Entendi! Bom, vamos tentar então…Vou colocar resolvido neste tópico pois o problema inicial foi solucionado.
Obrigada :wink: