【问题标题】:EOFException in java networkingjava网络中的EOFException
【发布时间】:2016-02-11 01:10:24
【问题描述】:

这是我第一次使用 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() 方法之外的任何调用都会导致上述错误。

【问题讨论】:

  • 我们也需要查看服务端代码。
  • @EJP 是的,忘记了,只是添加了它
  • EOFException 是文件结束异常。您已完成读取流中的所有内容,并尝试再次读取。
  • sendData() 在哪里调用?
  • @KayKay 它在不同的类中被调用并向客户端发送一个字符串

标签: java networking eofexception


【解决方案1】:

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

这意味着如果服务器真的调用了sendData(),它一定抛出了一个你没有提到的异常。

【讨论】:

  • 我发现错误之一是关闭连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多