Socket, connection refused, envio e recebimento[Resolvido]

2 respostas
magemelli

Daê Galera, blz? Assim, tô com um problema, que não consegui resolver, eu quero passar uma instrução SQL para o Servidor e Retornar para o cliente um XML.
Porém, quando vai receber os dados de volta do servidor, ele dá o seguinte Erro:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.DataInputStream.read(DataInputStream.java:83)
at DAO.DaoCliente.Busca(DaoCliente.java:60)
at catalogocliente.CatalogoCliente.btBuscaByWordActionPerformed(CatalogoCliente.java:375)
at catalogocliente.CatalogoCliente.access$100(CatalogoCliente.java:26)
at catalogocliente.CatalogoCliente$2.actionPerformed(CatalogoCliente.java:118)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
e mais...

Vou passar a classe cliente e a classe servidor...

Classe Cliente

public class DaoCliente {

    XMLFactory xml = new XMLFactory();
    private byte buffer[];
    FileInputStream fs;

    public ArrayList<Produto> Busca(String SQL) throws ConnectException, IOException, JDOMException {
        ArrayList<Produto> prod = new ArrayList<Produto>();
        //Declaro o socket cliente
        String end = "c:\";
        String arq = "catalogoCliente.xml";

        try {
            Socket s = new Socket("127.0.0.1", 5432);
            if (s.isConnected()) {

                //enviando a instrução SQL
                OutputStream SQLout = s.getOutputStream();
                DataOutputStream dosSQL = new DataOutputStream(SQLout);
                //envia a mensagem
                dosSQL.writeUTF(SQL);
                

                DataInputStream entrada = new DataInputStream(s.getInputStream());
                // FileOuputStream para salvar o arquivo recebido
                FileOutputStream sarq = new FileOutputStream(end + arq);
                byte[] br = new byte[512];
                int leitura = entrada.read(br);
                while (leitura != -1) {
                    if (leitura != -2) {
                        sarq.write(br, 0, leitura);
                    }
                    
                    leitura = entrada.read(br);
                }
                prod = xml.importXML();
                return prod;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        //dos.close();
        //s1.close();


        //Trata possíveis exceções

        return prod;

    }
}
Classe Servidor
public static void main(String[] args) throws IOException {
        CatServidor cs = new CatServidor();
        // cria o nosso socket
        ServerSocket servsock = new ServerSocket(5432);
        System.out.println("Aguardando Conexão......");
        Socket sock = servsock.accept();
        daoCatalogo dc = new daoCatalogo();
        System.out.println("Conexão aceita");


        InputStream isSQL = sock.getInputStream();
        DataInputStream disSQL = new DataInputStream(isSQL);
        String SQL = disSQL.readUTF();

        System.out.println(SQL);
        try {
            ArrayList<produto> prodList = dc.busca(SQL);
            XMLArquivo.ExportXMLProdutos(prodList);
            String myFile = "c:\catalogoServidor.xml";
            byte buffer[] = new byte[512];


            //Leitura do arquivo solicitado
            FileInputStream file = new FileInputStream(myFile);
            //DataInputStream para processar o arquivo solicitado
            DataInputStream arq = new DataInputStream(file);
            DataOutputStream saida = new DataOutputStream(sock.getOutputStream());
            // sock.flush();
            int leitura = arq.read(buffer);
            //Lendo os bytes do arquivo e enviando para o socket
            while (leitura != - 1) {
                if (leitura != - 2) {
                    saida.write(buffer, 0, leitura);
                }
                leitura = arq.read(buffer);
            }
        } catch (Exception e) {
            e.printStackTrace();

        }
}
}

Abraço a todos e agradeço pela ajuda

2 Respostas

A

Pode tentar essas 2 coisas?
1 ) Dar flush após escrever qualquer coisa dentro dos sockets
2 ) Dar sock.close() no Servidor

magemelli

alexandrehdk:
Pode tentar essas 2 coisas?
1 ) Dar flush após escrever qualquer coisa dentro dos sockets
2 ) Dar sock.close() no Servidor

Valew Brother, deu certo, fiz um For infinito pro servidor continar atendendo requisições, e no final do for, sock.close()

Criado 19 de outubro de 2009
Ultima resposta 28 de out. de 2009
Respostas 2
Participantes 2