Problemas com Socket

Então pessoal, estou vendo Socket´s e não estou conseguindo fazer rodar o tal socket ae…

Erro:

java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.net.SocketInputStream.read(SocketInputStream.java:182) at java.io.DataInputStream.readLine(DataInputStream.java:496) at br.com.sovis.servidor.ComunicacaoSocket.comunicacao(ComunicacaoSocket.java:51) at br.com.sovis.servidor.ComunicacaoSocket.run(ComunicacaoSocket.java:36) at br.com.sovis.servidor.ServidorSocket.start(ServidorSocket.java:38) at serversocket.Main.main(Main.java:24)

[code]public class ServidorSocket {

private ServerSocket serverSocket = null;
private Socket socket = null;
private ComunicacaoSocket comunicacao = null;

private ConfiguracaoServerSocket configuracao = null;

public ServidorSocket (ConfiguracaoServerSocket configuracao) {
    this.configuracao = configuracao;
}

public void start() {
    try {
        serverSocket = new ServerSocket(configuracao.getPorta());
        System.out.println("Aguardando Conexão... [" + configuracao.getPorta() + "]");
        while (true) {
            socket = serverSocket.accept();
            System.out.println("Conectado a: " + socket.getInetAddress().getHostAddress());
            comunicacao = new ComunicacaoSocket(socket);
            comunicacao.run();
            //accept a connection ;
            //create a thread to deal with the client ;
        }            

    } catch (IOException ex) {
        Logger.getLogger(ServidorSocket.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void stop() {
    try {
        socket.close();
        serverSocket.close();
        socket = null;
        serverSocket = null;

    } catch (IOException ex) {
        Logger.getLogger(ServidorSocket.class.getName()).log(Level.SEVERE, null, ex);
    }
    
}

}[/code]

[code]public class ComunicacaoSocket extends Thread {

private DataInputStream input = null;
private DataOutputStream output = null;
private Socket socket = null;
private String mensagem = "";

public ComunicacaoSocket(Socket socket) {
    this.socket = socket;
}

@Override
public void run() {
    try {
        
        input = new DataInputStream(socket.getInputStream());
        output = new DataOutputStream(socket.getOutputStream());
        comunicacao();
        System.out.println("Descontado de: " + socket.getInetAddress().getHostAddress());
        output.close();
        input.close();
        socket.close();

    } catch (IOException ex) {
        Logger.getLogger(ComunicacaoSocket.class.getName()).log(Level.SEVERE, null, ex);
    }
    
}

public void comunicacao() throws IOException{
    while (true) {
        mensagem = "";
        mensagem = input.readLine();
        System.out.println("Recebeu: " + mensagem);
    }
    //TODO: Verificar Possibilidade de retornar alguma mensagem para o Cliente
}

}[/code]

[code]public class ClienteSocket {

public static void main(String[] args) {
    Socket socket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    try {
        socket = new Socket("localhost", 90);
        out = new PrintWriter(socket.getOutputStream());
        //in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out.write("Enviando Dados...");

    } catch (UnknownHostException ex) {
        Logger.getLogger(ClienteSocket.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(ClienteSocket.class.getName()).log(Level.SEVERE, null, ex);
    }

}

}[/code]

Alguma coisa simples que não estou percebendo?!?!?!

Alguem?!

Agora esta dando o seguinte erro, e estou lendo a mensagem do meu CLIENTE!

java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323) at java.io.ObjectInputStream$BlockDataInputStream.readUnsignedShort(ObjectInputStream.java:2764) at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2820) at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1051) at br.com.sovis.servidor.ComunicacaoSocket.comunicacao(ComunicacaoSocket.java:51) at br.com.sovis.servidor.ComunicacaoSocket.run(ComunicacaoSocket.java:37) at br.com.sovis.servidor.ServidorSocket.start(ServidorSocket.java:39) at serversocket.Main.main(Main.java:24)

Linha do erro .04:

public void comunicacao() throws IOException{ while (true) { mensagem = ""; mensagem = input.readUTF(); System.out.println("Recebeu: " + mensagem); } //TODO: Verificar Possibilidade de retornar alguma mensagem para o Cliente }

Honestamente, nem li o programa direito, mas notei que você “lê linhas” mas não “grava linhas”. writeln (ou é println?) muda alguma coisa?

Bem segui o tutorial da SUn… peguei outro agora e da tudo na mesma!
Mudei o Stream de Saida e começou a receber de boa a mensagem… porém, continua dando Exception!

Outro detalhe… fiz novos testes e descobri que ta ocorrendo o seguinte…
O meu CLIENTE faz:

ObjectOutputStream output = new ObjectOutputStream (socket.getOutputStream());

e dai no server para, e dá isso:

SEVERE: null java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266) at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280) at br.com.sovis.servidor.t1.Servidor.iniciarServidor(Servidor.java:35) at br.com.sovis.servidor.t1.Servidor.main(Servidor.java:53)

uhauhauhauha acho que achei o problema!!!
Seguinte, a ordem dos fatores altera o produto… vou mandar o resumo do que mudei:

Código Errado:

[code]public Cliente() {
try {
socket = new Socket(servidor, porta);

        System.out.println("Inciando e Enviado mensagem do Cliente...");
        System.out.println("Conectado: " + socket.isConnected());
        ObjectInputStream input = new ObjectInputStream
        (socket.getInputStream());
        System.out.println("Conectado: " + socket.isConnected());
        ObjectOutputStream output = new ObjectOutputStream
        (socket.getOutputStream());
        System.out.println("Conectado: " + socket.isConnected());
        output.writeObject("enviando dados");
        String message = (String) input.readObject();
        System.out.println("Retornou: " + message);

        socket.close();

    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (UnknownHostException ex) {
        Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
    }
}[/code]

Código Certo:

[code]public Cliente() {
try {
socket = new Socket(servidor, porta);

        System.out.println("Inciando e Enviado mensagem do Cliente...");
        System.out.println("Conectado: " + socket.isConnected());
        System.out.println("Conectado: " + socket.isConnected());
        ObjectOutputStream output = new ObjectOutputStream
        (socket.getOutputStream());
        System.out.println("Conectado: " + socket.isConnected());
        output.writeObject("enviando dados");
        ObjectInputStream input = new ObjectInputStream
        (socket.getInputStream());
        String message = (String) input.readObject();
        System.out.println("Retornou: " + message);

        socket.close();

    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (UnknownHostException ex) {
        Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
    }
}[/code]

Enfim, você não pode tentar um INPUT no Cliente antes de fazer um OUTPUT! =]