Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ruberlanwesley
      Eu estou usando a API do Facebook restfb consigo inserir normalmente um comentário em um post no facebook, mas para responder o comentário não consigo assimilar como tornar isso possível.
       
      Eu estou usando Java, Netbeans e a biblioteca restfb, e consultando Facebook graph-api Comment, mas não faço ideia de como fazer em Java.
       
      Para inserir o comentário no post:
      FacebookType response = clienteFacebook.publish(idPost + “/comments”, FacebookType.class, Parameter.with(“message”, comentario));
      System.out.println(“fb.com/” + response.getId());
       
      Para responder o comentário estou tentando sem sucesso:
      FacebookType response = clientFacebook.publish(idComment + “/comments”, FacebookType.class, Parameter.with(“message”, respostaComentario));
      System.out.println(“fb.com/” + response.getId());
       
      Eu não posso responder ao comentário seguindo o mesmo padrão de inserir comentário no post, alguém pode me ajudar a responder um comentário?
    • Por bobzznnn
      Como deixo a seleção do radio marcada após o usuario escolher "yes" ou "no" e mandar a informação pra tabela usuario em PhpMyAdmin
      <div class="container" style="width:500px;"> <h3 class="text-center">Compound</h3> <div class="radio"> <input type="radio" name="compound" value="yes" />Yes <br /> <input type="radio" name="compound" value="no" />No <br /> </div> <div id="result"></div> </div> <br />  
    • Por luciano
      Olá boa noite a todos, estou a dias tentando fazer este scrit escrever mais não sou nada bom com java
      se alguém puder me ajudar agradeço de mais.
      ele esta abrindo uma janela alert com os dados até ai ok,
      na verdade precisava que ele redirecionasse a página.
       
      Obrigado a quem me der esta luz
       
      <script language="javascript">
      var LIP_LowPrecision = false; //false = ask permission to the browser, higher precision | true = don't ask permission, lower precision
      function LocalizaIP_done(ip_data){
          if (!ip_data['error']) //this line is an exemple, you must change it by your Geolocation manipulation code
               alert('IP Geolocation: '+ip_data['city']+'-'+ip_data['state']+'-'+ip_data['country']+' (lat:'+ip_data['latitude']+',long:'+ip_data['longitude']+')');
       
       
      if (ip_data['city'] = 'santos')
      {
      location.href="santos.htm";
      }
      else
      {
      location.href="sao-paulo.htm";
      }
       
      }
      </script>
       
       
       
    • Por MarKteus
      Olá

      Estou enfrentando um problema bem chato com Java aqui em meu projetos, vejam:
      2019-02-01 08:57:06.469 ERROR 18120 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause com.microsoft.sqlserver.jdbc.SQLServerException: Nome de objeto 'db_mybank.dbo.edification' inválido.     at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:259) ~[mssql-jdbc-6.4.0.jre8.jar:na] Percebam que ali no nome do objeto está sendo inserido um underline ou underscore como queiram, porém esse traço não é para ser exibido a inserção do mesmo faz com que o objeto não seja encontrado, o pior é que na especificação da classe está correto vejam:
       
      import javax.persistence.Table; @Entity @Table(name = "tbedification", schema = "dbo", catalog = "dbmybank") public class edification implements Serializable { /** * Alguém consegue me ajuda com isso, acho que o hibernate está "zuando" alguma coisa

      Estou usando a ide Eclipse Neon e SpringBoot
    • Por breno2019
      Olá pessoal, pretendo criar um aplicativo que precisará conter um chat interno enviando mensagens uma a uma, a idéia do aplicativo é a mesma que uber, a pessoa estará disponível para oferecer carona e quem se interessar em aceitar vai abrir o chat. Mas o foco da minha pergunta está no chat, como eu faria esse chat?
      Detalhe, estou usando android studio para desenvolver o app, beckend em php + mysql para api e estou consumindo o webservice com o retrofit.
×

Informação importante

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