I'm trying to send a blank TCP packet to a server running on port 80 however it gives me an EOFException when the server responds.
java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2624) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3099) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:853) at java.io.ObjectInputStream.(ObjectInputStream.java:349) at me.adamstephenson.test.main.main(main.java:106)
ArrayList<String> results = getIPs();
for (String ip : results){
System.out.println(ip);
String pingip = ip;
pingip = pingip.replaceAll("[^\\d.]", "");
System.out.println(pingip);
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
socket = new Socket(pingip, 80);
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream()); // error here
String msg = "blank";
oos.write(msg.getBytes());
oos.flush();
//read the server response message
String message = (String) ois.readObject();
System.out.println(message);
ois.close();
oos.close();
socket.close();
} catch (ConnectException | EOFException e) {
System.out.println("Failed to connect to: "+pingip);
e.printStackTrace();
}
}
Does the EOFException mean that the response was blank?
It means that the server didn't even create an ObjectOutputStream
before closng the socket. Probably you sent it something it didn't understand, and maybe the application protocol it uses doesn't involve Serialization at all.
Port 80 is reserved for HTTP after all.