【发布时间】:2015-04-30 11:17:09
【问题描述】:
我在使用 ObjectInputStream 时遇到了问题,我已经为此苦苦挣扎了 2 天。我试图寻找解决方案,但不幸的是没有找到合适的答案。
我正在尝试编写一个客户端/服务器应用程序,其中客户端将对象(在本例中为配置类)发送到服务器。这个想法是连接在发送对象后保持活动状态,因此可以在必要时发送新对象。
以下是我的客户端代码的重要部分:
mSocket = new Socket("192.168.43.56", 1234);
mObjectIn = new ObjectInputStream(mSocket.getInputStream());
mObjectOut = new ObjectOutputStream(mSocket.getOutputStream());
mObjectOut.writeObject(stubConfig);
mObjectOut.flush();
在上面的代码中,我省略了一些 try/catch 块,以保持代码对您的可读性。
服务器端如下:
mHostServer = new ServerSocket(port);
mSocket = mHostServer.accept();
// create streams in reverse oreder
mObjectOut = new ObjectOutputStream(mConnection.getOutputStream());
mObjectOut.flush();
mObjectIn = new ObjectInputStream(mConnection.getInputStream());
while (mIsSocketConnected)
{
StubConfig = (StubConfiguration)mObjectIn.readObject();
}
我想要实现的是,只要 socketconnection 处于活动状态,服务器就会监听传入的配置对象。
但是,当我运行我的程序时,我在服务器端的 while 循环中遇到了 EOFException。我在 while 循环的第一次迭代中收到了第一个配置对象,没有任何问题,但之后每次调用 readObject() 时我都会收到 EOFException。
我正在寻找解决此问题的方法。任何人都可以把我引向好的方向吗?
编辑:我读到的有关 EOFException 的内容是,当您想从流中读取时,它会在到达它的末尾时被抛出。这意味着由于某种原因,流在对象发送后结束。有没有办法重新初始化流??
【问题讨论】:
-
您在第二次迭代中有一个 EOF,因为客户端写入一次(没有 while),而服务器循环读取。所以用 if 替换 while 读取一次
标签: java sockets networking objectinputstream eofexception