java - java网络中的EOFException

标签 java networking eofexception

这是我第一次使用java网络。我必须将它用于我正在开发的一个简单的纸牌游戏项目。我的服务器和客户端将在打印“已接收连接”时进行通信。但在这行之后出现以下错误:

java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at ClientConnectionManager.reciveData(ClientConnectionManager.java:49)
at LogicThread.getHandSize(GameLogic.java:22)
at LogicThread.run(GameLogic.java:16)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-4" java.lang.NullPointerException
at LogicThread.getHandSize(GameLogic.java:22)
at LogicThread.run(GameLogic.java:16)
at java.lang.Thread.run(Unknown Source)

有问题的类是:

static ObjectInputStream input;
static ObjectOutputStream output;
static Socket socket;

    public static void connectToServer(){
    try {
        System.out.println("connecting");
        socket = new Socket(ip, port);
        input = new ObjectInputStream(socket.getInputStream());
        output = new ObjectOutputStream(socket.getOutputStream());
        output.flush();
        System.out.println("connected");
        reciveData();
        logic.startLogic();
        //listenForData();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static Object reciveData(){
    try {
        Object obj = input.readObject(); - Error is on this line
        System.out.println(obj);
        return obj;
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }
    return null;
}

发送数据的服务器代码:

    ServerSocket server;
    server = new ServerSocket(2302);
    Socket connection;
    connection = server.accept();
    output = new ObjectOutputStream(connection.getOutputStream());

    public void sendData(Object data){
    try {
        output.writeObject(data);
        output.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我不确定是什么原因导致此问题,因为服务器发送了一个“已收到连接”,客户端毫无问题地接收并打印该消息。但是任何来自 connectToServer() 方法外部的调用都会导致上述错误。

最佳答案

对等方已关闭连接。服务器正在某处关闭接受的套接字或其流之一。

这意味着,如果服务器确实调用了sendData(),那么它一定抛出了您没有提到的异常。

关于java - java网络中的EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321388/

相关文章:

java - Spring 启动: Prevent double encoding of % by Resttemplate

java - 反序列化对象时出现 EOFException

java - DataInputStream 给出 java.io.EOFException

java - 使用 hibernate 5.0.2 和 glassfish4.0

java - Android Spinner - 如何使下拉 View 透明?

linux - 将有线接口(interface)桥接至无线接口(interface)的问题

networking - TCP 兼容性 : Why is TCP not compatible with packet broadcast and multicasting actions?

networking - NetXtreme II(BCM 5708)每秒UDP数据包?

Java Sockets - 尝试实现多线程时出现 EOFException

java - (android studio)无法更改webview中的 "Webpage not available"页面