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??
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:
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:
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();
}
publicvoidconexao()throwsIOException{ServerSocketservidor=newServerSocket(this.porta);while(!encerrar){Socketcliente=servidor.accept();txtaConectados.append("Nova conexão com o cliente "+cliente.getInetAddress().getHostAddress()+"\n");}}
Lucas_Abbatepaolo
Lana…
eu não encontrei nenhum erro em seu codigo…
o servidor esta eu um JFrame e o cliente esta no outro?
Lana_Csil
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?
Lucas_Abbatepaolo
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…
Lana_Csil
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
Então a o frame não aparece se eu não encerrar o while e se eu colocar o “append” certo?
Lucas_Abbatepaolo
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…
Lana_Csil
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:
Lucas_Abbatepaolo
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…
Lana_Csil
Entendi! Bom, vamos tentar então…Vou colocar resolvido neste tópico pois o problema inicial foi solucionado.
Obrigada