java - 发送 ObjectOutputStream 时出现 EOFException

标签 java tcp objectinputstream eofexception

我正在尝试向运行在端口 80 上的服务器发送一个空白的 TCP 数据包,但是当服务器响应时它给了我一个 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) 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();
        }


    }

EOFException 是否意味着响应为空?

最佳答案

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

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

关于java - 发送 ObjectOutputStream 时出现 EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43766021/

相关文章:

java - 在 IOS 上恢复后 robovm 黑屏

Qt 通过 TCP 发送文件

node.js - TCP 服务器 : Drop Connection, 而不是重置或响应?

node.js - requestNode模块是否限制出站请求?

java - 强化 try-with-resource 的安全问题 "Unreleased resource stream"

java - 什么时候使用 ObjectInputStream.readUnshared() 和 .readObject()?

java - 修改后的选择排序,选择最大的数字

java - 将与 USB 血糖仪设备通信的 C 代码从 Linux 迁移到 Android

java - 处理 ServletException - Java Servlet API 3.+

java - readObject 挂起应用程序