发送ObjectOutputStream时发生EOFException

时间:2017-05-03 17:00:01

标签: java tcp objectinputstream eofexception

我正在尝试将空白TCP数据包发送到在端口80上运行的服务器,但是当服务器响应时它会给我一个EOFException。

  

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)       在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是否意味着响应是空白的?

1 个答案:

答案 0 :(得分:1)

这意味着服务器甚至在关闭套接字之前甚至没有创建ObjectOutputStream。可能你发了一些它没有理解的东西,也许它使用的应用程序协议根本不涉及序列化。

端口80毕竟是为HTTP保留的。