Chat

4 respostas
ericsilva

Galera boa tarde eu estou tentando me entender com o Chat proposto na apostila da caelum mais quando vou executar dá o seguinte erro:

Exception in thread "main" 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:519) at java.net.Socket.connect(Socket.java:469) at java.net.Socket.(Socket.java:366) at java.net.Socket.(Socket.java:179) at Cliente.executa(Cliente.java:23) at Cliente.main(Cliente.java:10) Java Result: 1
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;


public class Cliente {
    public static void main(String[] args) throws UnknownHostException, IOException {
        new Cliente("127.0.0.1",6000).executa();
    }
    
    private String host;
    private int porta;
    
    public Cliente(String host, int porta) {
        this.host = host;
        this.porta = porta;
    }
    
    public void executa() throws IOException {
        System.out.println("O cliente até aqui ta de boa");
        Socket cliente = new Socket(this.host,this.porta);
        System.out.println("O cliente se conectou ao servidor");
            
        Recebedor r = new Recebedor(cliente.getInputStream());
        new Thread(r).start();
        
        Scanner lerDoTeclado = new Scanner(System.in);
        PrintStream saida = new PrintStream(cliente.getOutputStream());
        while(lerDoTeclado.hasNextLine()) {
            saida.println(lerDoTeclado.nextLine()); 
        }
        
        saida.close();
        lerDoTeclado.close();
        cliente.close();        
    }
}

4 Respostas

ericsilva

ninguém pode me ajudar?

squall926

Boa noite!!!
"Exception in thread “main” java.net.ConnectException: Connection refused: connect "
Post o codigo do servidor, pois é onde parece conter o erro!

ericsilva
public class Servidor {

 public static void main(String[] args) throws IOException {
 // inicia o servidor
new Servidor(12345).executa();
}
private int porta;
private boolean encerrar;
private List<PrintStream> clientes;
public Servidor (int porta) {
this.porta = porta;
this.clientes = new ArrayList<PrintStream>();
}
public void executa () throws IOException {
ServerSocket servidor = new ServerSocket(this.porta);
System.out.println("Porta 12345 aberta!");
while (!encerrar) {
// aceita um cliente
Socket cliente = servidor.accept();
System.out.println("Nova conexão com o cliente " +
cliente.getInetAddress().getHostAddress()
);
// adiciona saida do cliente à lista
PrintStream ps = new PrintStream(cliente.getOutputStream());
this.clientes.add(ps);
// cria tratador de cliente numa nova thread
TrataCliente tc = new TrataCliente(cliente.getInputStream(), this);
new Thread(tc).start();
}
}
public void distribuiMensagem(String msg) {
// envia msg para todo mundo
for (PrintStream cliente : this.clientes) {
cliente.println(msg);
}
}
}
public class TrataCliente implements Runnable {
private InputStream cliente;
private Servidor servidor;
public TrataCliente(InputStream cliente, Servidor servidor) {
this.cliente = cliente;
this.servidor = servidor;
}
public void run() {
// quando chegar uma msg, distribui pra todos
Scanner s = new Scanner(this.cliente);
while (s.hasNextLine()) {
servidor.distribuiMensagem(s.nextLine());
}
s.close();
}
}

ai está obrigado pela ajuda

squall926

Boa noite,
Hoje pude observar seu codigo, na verdade vi que você não inicializou o booleano “encerrar”:

while (!encerrar) {  /* ISSO NÃO EXECUTA PORQUE  encerrar NÃO FOI INICIALIZADO COMO "TRUE"*/
 // aceita um cliente  
 Socket cliente = servidor.accept();  
 System.out.println("Nova conexão com o cliente " +  
 cliente.getInetAddress().getHostAddress()  
 );
//TENTE ISSO
encerrar = true;

//OU ISSO
# while (true) {  
# // aceita um cliente  
# Socket cliente = servidor.accept();  
# System.out.println("Nova conexão com o cliente " +  
# cliente.getInetAddress().getHostAddress()  
# );

Acho que isso deve resolver seu problema.
Fui

Criado 16 de outubro de 2008
Ultima resposta 31 de out. de 2008
Respostas 4
Participantes 2