-1

I have established a connection via sockets between two computers. I have created an own object called "Result" and I can successfully transfer it to the server computer from the client computer.

If I do this socket connection only on my computer then I can receive an object from the server computer as well.

The problem is when I try to receive an object from the server computer. I get error messages and I have the feeling that something is happening to my object that is being sent. If I open a saved (serializable) Result object on my own computer in notepad then I get a lot of random symbols but when I do the same on the server computer then it is only two symbols.

Here is my code, I'm using JFileChooser so I can easily access the object I want to send from the server, understandably I have access to both computers.

Code for the sending server

public static void serverSendObject() throws IOException, ClassNotFoundException {

       ServerSocket serverSocket = null;

         try {

             serverSocket = new ServerSocket(2001,10);

         } 

         catch (IOException ex) {

             System.out.println("Can't setup server on this port 
                   number. ");
         }

         Socket socket = null;
         OutputStream out = null;
         ObjectOutputStream objOut = null;

         try {

             socket = serverSocket.accept();
         }

         catch (IOException ex) {

             System.out.println("Can't accept client connection. ");
         }

         try {

             out = socket.getOutputStream();
         } 

         catch (IOException ex) {

             System.out.println("Can't get socket input stream. ");
         }

         try {

             objOut = new ObjectOutputStream(out);
         } 

         catch (FileNotFoundException ex) {

             System.out.println("File not found. ");
         }

         JFileChooser fc = new JFileChooser();

         int reValue=fc.showOpenDialog(null);

         if(reValue == JFileChooser.APPROVE_OPTION) {



             try(ObjectInputStream objInput = new ObjectInputStream(new FileInputStream(fc.getSelectedFile()))) {

                    objOut.writeObject(objInput.readObject());


             }

            catch(IOException e) {

            }
            catch(ClassNotFoundException e) {

            }

         }

         serverSocket.close();
         socket.close();

   }

Code for the receiving client

public void loadExternal() throws IOException, ClassNotFoundException {

        Visualizer vis = new Visualizer();
        currentVis=vis;


        Socket socket = null;
        String host= *insert IP address*

        socket= new Socket(host, 2001);

        InputStream in = socket.getInputStream();

        ObjectInputStream objIn = new ObjectInputStream (in);

        currentRes = (Result) objIn.readObject();




        objIn.close();
        socket.close();
}

I keep getting

java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)

as an error. I have tried to put a catch on this but it doesn't help. I have tried some different methods but nothing seems to work.

Just want to point out that the exact same code works when I connect the sockets on my OWN computer and that this problem occurs when I connect two different computers AND that I'm being able to send an object to the server computer.

EDIT: I think I can confirm that something has happaned to the object I have sent. A locally (via sockets) saved object is 1131 bytes while the object I have sent to the server computer is only 4 bytes.

I use the same kind of technique when I send the objects, with ObjectOutputStream at the client and ObjectInputStream at the server.

Henx
  • 1
  • 1

1 Answers1

0

whenever you write anything. remember to flush and then close. Hope can help.

Qingfei Yuan
  • 1,196
  • 1
  • 8
  • 12
  • Sadly it didn't help. I have the feeling that the sending of an object via sockets to another computer is causing problems hence the lost bytes. I will gladly accept advice. – Henx May 24 '19 at 07:34
  • Have you checked JRE version in both client and server? – Qingfei Yuan May 24 '19 at 13:31