Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EOFException in readUTF

I am getting below EOFException while using readUTF() method, please let me know how could i overcome with this problem and also please suggest how readUTF() transfers socket information over the other networks

import java.io.*;
import java.net.*;

public class GreetingServer {
    public static void main(String args[]) {
        String servername =args[0];
        int port = Integer.parseInt(args[1]);

        try {
            System.out.println("Server Name "+ servername +"Port"+port);

            Socket client = new Socket(servername,port);
            System.out.println("Just connected to"+ client.getRemoteSocketAddress());
            OutputStream outs = client.getOutputStream();
            DataOutputStream dout = new DataOutputStream(outs);
            dout.writeUTF("Hello From"+client.getRemoteSocketAddress());
            InputStream in = client.getInputStream();
            DataInputStream din = new DataInputStream(in);
            System.out.println("Server Says"+ din.readUTF());
            client.close();
        }
        catch (EOFException f) {
            f.printStackTrace();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
}
like image 200
raja shekar Avatar asked Mar 23 '23 23:03

raja shekar


2 Answers

You have reached the end of the stream. There is no more data to read.

Possibly your server isn't using writeUTF(), or you are out of sync with it. If the server is writing lines you should be using BufferedReader.readLine().

like image 147
user207421 Avatar answered Apr 05 '23 01:04

user207421


The docs for readUtf() state;

First, two bytes are read and used to construct an unsigned 16-bit integer in exactly the manner of the readUnsignedShort method . This integer value is called the UTF length and specifies the number of additional bytes to be read. These bytes are then converted to characters by considering them in groups. The length of each group is computed from the value of the first byte of the group. The byte following a group, if any, is the first byte of the next group.

This suggests to me that what your trying to read with readUtf() isn't UTF, as the EOFException occurs when the End of File (EOF) is read unexpectedly.

Check that you are reading the right types in the same order that your server is sending them etc. You should be following a decided protocol, rather than blindly reading.

like image 31
Robadob Avatar answered Apr 05 '23 02:04

Robadob