1
Hello, good morning, good afternoon or good evening, I’m having a problem, with a system I’m creating, I thank anyone who can help. Then, this system basically passes a "protocol" to the server and it returns an object, and vice versa, however, when finishing the client and reopening without doing the same with the server, an error is caused on the server, and when trying to make some return of an object after re-open the client is caused an error.
Server error when closing client:
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)
Error in client when reopening and trying to get the object:
java.io.StreamCorruptedException: invalid stream header: 73720013 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866) at java.io.ObjectInputStream.(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)
- Server classes:
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 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); } } }
- Classes of the 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 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 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 mList = (List) 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(); } } }