java - 从 Java 中的 ObjectInputStream 中连续读取对象

标签 java sockets networking objectinputstream eofexception

我在使用 ObjectInputStream 时遇到问题,并且已经为此苦苦挣扎了 2 天。我试图寻找解决方案,但不幸的是没有找到合适的答案。

我正在尝试编写一个客户端/服务器应用程序,其中客户端将对象(在本例中为配置类)发送到服务器。这个想法是连接在发送对象后保持 Activity 状态,因此可以在必要时发送新对象。

以下是我的客户端代码的重要部分:

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 block ,以保持代码对您的可读性。

服务器端如下所示:

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(); 
}

我想要实现的是,只要套接字连接处于 Activity 状态,服务器就会监听传入的配置对象。

但是,当我运行程序时,我在服务器端的 while 循环中收到了 EOFException。我在 while 循环的第一次迭代中收到第一个配置对象,没有任何问题,但之后每次调用 readObject() 时都会收到 EOFException 。

我正在寻找解决这个问题的方法。谁能引导我走向好的方向?

编辑:我读到的有关 EOFException 的内容是,当您想要在到达流末尾时从流中读取数据时,会抛出该异常。这意味着由于某种原因,流在对象发送后结束。有没有办法重新初始化流等等?

最佳答案

当对等方关闭连接时,

EOFExceptionreadObject() 抛出。之后就再也不会有更多的数据了。 因此您根本无法写入多个对象:您而是关闭了连接。

关于java - 从 Java 中的 ObjectInputStream 中连续读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966311/

相关文章:

linux - 如何在 Linux 中创建很多(我的意思是很多)套接字?

无法通过 DNS 欺骗欺骗主机命令

python - 如何检查一个网络是否包含在 Python 中的另一个网络中?

ios - 回调中的类型推断错误

java - 应使用 PowerManager 唤醒设备多长时间以确保显示使用 BroadcastReceiver 创建的 Activity ?

Linux 异步 IO - aio.h 和 libaio.h 之间的区别

java - 在 Java 中设置 CompareTo() 方法

sockets - 如何将sockaddr_in6::sin6_addr字节顺序设置为网络字节顺序?

java - 在Java中如何使用方括号作为分隔符来解析字符串?

java - 如何在 Spring 中连接相互依赖的 bean?