【问题标题】:ObjectInputStream throws EOFException after repeated use of readUTF()重复使用 readUTF() 后 ObjectInputStream 抛出 EOFException
【发布时间】:2020-05-03 20:09:08
【问题描述】:

我正在尝试实现服务器客户端通信,并希望保持脚趾连接打开,直到客户端终止它,因此它在循环中运行。第一次迭代工作正常,但是在循环的第二次运行中 client.getOis().readUTF(); 抛出异常。

这是服务器端代码:

  try {
        client.setOis(new ObjectInputStream(client.getSocket().getInputStream()));
        client.setOos(new ObjectOutputStream(client.getSocket().getOutputStream())); 

        while (active) {
            String client_msg = client.getOis().readUTF();
            String action = client_msg.split(";")[0];
            String leftover = client_msg.split(";")[1];

            switch (action) {
                case "LOGIN": login(action, leftover);break;
                case "SEND": send(leftover);break;
                case "DISCONNECT": update(action);break;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

客户端只发送一个简单的字符串"LOGIN;username",登录方法会处理它。

这是个例外:

java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at java.io.ObjectInputStream$BlockDataInputStream.readUnsignedShort(ObjectInputStream.java:3170)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:3226)
at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1133)
at gruber.middleware.ClientHandler.run(ClientHandler.java:26)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

【问题讨论】:

  • 您是否在某处关闭了套接字?我注意到你把它放在client 类中,然后调用client.getOis() 来检索它。此外,向我们展示您的客户端服务器代码的一半也不是很有帮助。
  • 谢谢。我在 try-with-resources 中打开了初始套接字和流,因此它们会自动关闭。再次感谢您的快速回复。

标签: java sockets networking server objectinputstream


【解决方案1】:

问题是我在 try-with-resources 中打开了 Socket 和 Streams,这意味着它们会自动关闭。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多