objectinputstream readobject中的EOFException [英] EOFException in objectinputstream readobject

查看:310
本文介绍了objectinputstream readobject中的EOFException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想制作一个服务器客户端应用程序.我设置好一切,然后收到此错误.我希望应用程序等到获得更多数据.

i want to make a server client application. i set everything up and i get this error. i want the app to wait till i get more data.

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)

在线:

listener.Received(inputstream.readObject(), id.ID);

服务器代码:

isrunning = true;
    Thread input = new Thread(new Runnable(){
        @Override
        public void run() {
            try{
                ServerSocket Server = new ServerSocket(LocalPort);
                while(isrunning){
                    Socket socket = Server.accept();
                    ObjectOutputStream outputstream = new ObjectOutputStream(socket.getOutputStream());
                    ObjectInputStream inputstream = new ObjectInputStream(socket.getInputStream());
                    Object obj = inputstream.readObject();
                    if(obj instanceof ID){
                        ID id = (ID) obj;
                        if(connctedChecker(id.ID)){
                            ID myid = new ID(ID, LocalIP, LocalPort);
                            outputstream.writeObject(myid);
                            connect(id.IP, id.Port);
                            listener.Connected(id.ID);
                            do{
                                listener.Received(inputstream.readObject(), id.ID);
                            }while(socket.isConnected());
                            listener.Disconnected(id.ID);
                            closeConnection(id.ID);
                        }
                    }
                    inputstream.close();
                    outputstream.close();
                    socket.close();
                }
                Server.close();
            }catch(Exception e){
                e.printStackTrace();
            }

        }
    });
    input.start();

客户代码:

output = new Thread(new Runnable(){
        @Override
        public void run(){
            try {
                socket = new Socket(RemoteIP, RemotePort);
                inputstream = new ObjectInputStream(socket.getInputStream());
                outputstream = new ObjectOutputStream(socket.getOutputStream());
                ID id = new ID(ID, LocalIP, LocalPort);
                outputstream.writeObject(id);
                outputstream.flush();
                Object obj = inputstream.readObject();
                if(obj instanceof ID){
                    ID inid = (ID) obj;
                    RemoteID = inid.ID;
                }
                while(socket.isConnected()){
                    Object object = queue.take();
                    outputstream.writeObject(object);
                    outputstream.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

听众:

public class Listener {

public void Connected(UUID ID){

}

public void Received(Object object, UUID ID){

}

public void Disconnected(UUID ID){

}

}

推荐答案

do{
    listener.Received(inputstream.readObject(), id.ID);
} while(socket.isConnected());

除非套接字/输入流有无限多个要发送的对象,否则它迟早会用完对象.这就是发生的事情.它在 EOFException .

Unless your socket/inputstream has an infinite number of objects to send, it is going to run out of objects sooner or later. That's what has happened. It says so right in the javadoc for EOFException.

在输入过程中意外到达文件末尾或流末尾的信号.

Signals that an end of file or end of stream has been reached unexpectedly during input.

此异常主要由数据输入流用来通知流结束.请注意,许多其他输入操作会在流末尾返回一个特殊值,而不是引发异常.

This exception is mainly used by data input streams to signal end of stream. Note that many other input operations return a special value on end of stream rather than throwing an exception.

这篇关于objectinputstream readobject中的EOFException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆