Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Muloo

Problema com sockets ao fechar client java.net.SocketException

Recommended Posts

Olá, bom dia, boa tarde ou boa noite, estou tendo um problema, com um sistema que estou criando, agradeço a quem puder ajudar. Então, esse sistema basicamente passa um "protocolo" para os servidor e ele retorna um objeto, e vice-versa, porém, ao finalizar o cliente e reabrir sem fazer o mesmo com o servidor, é causado um erro no servidor, e ao tentar fazer algum retorno de um objeto após re-abrir o cliente é causado um erro.

Erro no server ao fechar o cliente:

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.readLine(BufferedReader.java:324)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at main.java.Manager.run(Manager.java:45)

Erro no cliente ao reabrir e tentar obter o objeto:

java.io.StreamCorruptedException: invalid stream header: 73720013
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
    at main.java.controllers.VendedoresUI.load(VendedoresUI.java:69)
    at main.java.controllers.VendedoresUI.initialize(VendedoresUI.java:54)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at main.java.controllers.Controller.loadUI(Controller.java:150)
    at main.java.controllers.Controller.changeUI(Controller.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
    at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)

1. Classes do server:

1.1. Server.java

public class Server extends Thread{

    public Server(){}

    public void run() {

        try{

            ServerSocket listener = new ServerSocket(4444);
            listener.setSoTimeout(0);

            System.out.println("Server is now running");

            try {
                while (true) {

                    Socket socket = listener.accept();

                    new Manager(socket).start();
                }
            } finally {
                listener.close();
            }

        } catch (IOException ioexception){

            System.out.println("\u001B[31mError opening server, more info: ");
            System.out.println(ioexception);
            System.out.println("Closing server...");
            System.exit(0);

        }

    }

}

1.2. Manager.java

public class Manager extends Thread{
    private Socket socket;
    private BufferedReader in;
    private PrintWriter out;

    public Manager(Socket socket){
        this.socket = socket;
        System.out.println("\u001B[32m" + socket.getLocalAddress() + ":" + socket.getPort() + " connected");
    }

    @Override
    public void run() {

        try {

            out = new PrintWriter(socket.getOutputStream(), true);

            out.println("Connected");

            while(true) {
                ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream());
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                if(in.readLine().contains(Protocols.VENDEDOR_GET_ALL)) {
                    ResultSet res = SQLManager.Query("SELECT * FROM vendedores");
                    List<Vendedor> list = new ArrayList<>();

                    while (res.next()) {
                        Vendedor vendedor = new Vendedor();
                        vendedor.setNOME(res.getString("NOME"));
                        vendedor.setCPF(res.getString("CPF"));
                        vendedor.setCONTATO(res.getString("CONTATO"));
                        vendedor.setCONTA(res.getInt("CONTA"));
                        vendedor.setBANCO(res.getInt("BANCO"));
                        vendedor.setAGENCIA(res.getString("AGENCIA"));
                        vendedor.setCORRENTE(res.getString("CORRENTE"));
                        list.add(vendedor);
                    }
                    objectOutput.writeObject(list);
                }
                objectOutput.flush();
            }

        } catch (IOException e) {
            System.out.println("\u001B[31m" + socket.getLocalAddress() + ":" + socket.getPort() + " disconnected");
            e.printStackTrace();
            interrupt();
        } catch (SQLException | ClassNotFoundException e) {
            Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, e);
        }

    }
}

2. Classes do Client

2.1. ClientSocket.java

public class ClientSocket {

    private static Socket socket = null;
    private static BufferedReader in;
    private static PrintWriter out;

    public static void load(){
        try {

            socket = new Socket("127.0.0.1", 4444);
            in = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);

            System.out.print(ClientSocket.getIn().readLine());

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

    public static Socket getSocket() {
        return socket;
    }

    public static BufferedReader getIn() {
        return in;
    }

    public static PrintWriter getOut() {
        return out;
    }
}

2.2 VendedoresUI.java

public class VendedoresUI implements Initializable {

    @FXML
    private TableView<Vendedor> table;

    @FXML
    private TableColumn<?, ?> colName;

    @FXML
    private TableColumn<?, ?> colCPF;

    @FXML
    private TableColumn<?, ?> colContato;

    @FXML
    private TableColumn<?, ?> colConta;

    @FXML
    private TableColumn<?, ?> colBanco;

    @FXML
    private TableColumn<?, ?> colAgencia;

    @FXML
    private TableColumn<?, ?> colCorrente;

    ObservableList<Vendedor> list;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        load();

    }

    private void load(){
        try {
            if(ClientSocket.getSocket().isClosed()){
                ClientSocket.load();
            }

            PrintWriter escritor = new PrintWriter(ClientSocket.getSocket().getOutputStream(), true);

            escritor.println(Protocols.VENDEDOR_GET_ALL);


            ObjectInputStream obi = new ObjectInputStream(ClientSocket.getSocket().getInputStream());
            List<Vendedor> mList = (List<Vendedor>) obi.readObject();

            list = FXCollections.observableArrayList(mList);

            colName.setCellValueFactory(new PropertyValueFactory<>("NOME"));
            colCPF.setCellValueFactory(new PropertyValueFactory<>("CPF"));
            colContato.setCellValueFactory(new PropertyValueFactory<>("CONTATO"));
            colConta.setCellValueFactory(new PropertyValueFactory<>("CONTA"));
            colBanco.setCellValueFactory(new PropertyValueFactory<>("BANCO"));
            colAgencia.setCellValueFactory(new PropertyValueFactory<>("AGENCIA"));
            colCorrente.setCellValueFactory(new PropertyValueFactory<>("CORRENTE"));
            table.setItems(list);

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.

      Por favor, alguém pode me dar uma explicação referente o Template AdminLTE + Java Netbeans.

      Após importar para o Sistema Web. o componente para a pasta:
      WEB PAGES
      |___> bower_components - fica apresentando ERRO em algumas subpastas.

      Como consigo corrigir esses erros ?

      At.te,

      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida em Sistema WEB em Java.

      O Código abaixo está na Página index.jsp
      <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"/> </head> </html>
      O problema são os caracteres especiais que não consigo corrigir.

      Como consigo converter os Caracteres para o Padrão Português(BR) ?

      Grato,

      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou escrevendo um Sistema Java Web e quando clico no Botão Salvar, o Java acusa esse erro:

      ERROR: Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null
       
      Já tentei de várias formas resolver esse problema, mas não estou conseguindo.

      Por favor, alguém pode me ajudar identificar a origem e resolver o problema acima ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Estou enfrentando um problema que não consigo entender.

      Após Instalar o MySql versão 8.0.36, funciona corretamente realizando as conexões.

      O problema é:
      ---[ após reiniciar o micro, o MySql não faz as conexões.
      --[ tenta localizar este arquivo, mas não acha: my.ini
       
      Onde localizo ou configuro este arquivo na Pasta MySql ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, preciso de ajuda em Relação a Instalar o Jasper Reports no Eclipse, pois a opção de Eclipse Marketplace, não encontra para instalar.
       
      Já tentei de todas as formas mas não consegui, alguém conhece alguma rotina explicando este procedimento ?
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.