【发布时间】:2017-05-03 17:00:00
【问题描述】:
我正在尝试向在端口 80 上运行的服务器发送一个空白 TCP 数据包,但是当服务器响应时它给了我一个 EOFException。
java.io.EOFException 在 java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2624) 在 java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3099) 在 java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:853) 在 java.io.ObjectInputStream.(ObjectInputStream.java:349) 在 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();
}
}
EOFException 是否意味着响应为空白?
【问题讨论】:
-
不,这意味着对方在写任何东西之前关闭了套接字。服务器可能在某处抛出异常,可能试图读取请求。怀疑此代码只是将“空白”字节写入流中。服务器如何知道要读取多少数据?
-
您是否尝试过 ois.readByte() 而不是 ois.readObject()?。因为 readObject() 方法返回反序列化的对象,该对象存在于另一端。但是您正在编写字节数组。
-
是的,刚刚尝试了 readByte,同样的问题。准备重做服务器。
标签: java tcp objectinputstream eofexception