【问题标题】:EOFException when sending ObjectOutputStream发送 ObjectOutputStream 时出现 EOFException
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2013-10-21
    • 2014-05-16
    相关资源
    最近更新 更多