Java 网络上的对象反序列化

Java 网络上的对象反序列化,java,serialization,networking,sockets,messaging,Java,Serialization,Networking,Sockets,Messaging,当我试图通过如下网络从ObjectInputStream读取对象时,我得到了一个例外: Socket socket = new Socket("localhost", 4444); ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); while ((Object o = ois.readObject()) != null) { } 以下是我得到的一个例外: java.io.EOFException

当我试图通过如下网络从ObjectInputStream读取对象时,我得到了一个例外:

Socket socket = new Socket("localhost", 4444);
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while ((Object o = ois.readObject()) != null) {
}
以下是我得到的一个例外:

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) java.io.EOFException 位于java.io.ObjectInputStream$BlockDataInputStream.peekByte(未知源) 位于java.io.ObjectInputStream.readObject0(未知源) 位于java.io.ObjectInputStream.readObject(未知源) 连接本身似乎很好,因为我可以通过网络读取字符串,但对象不起作用

由于这是一个EOFException,我假设流当前不再发送数据。(在发送第一个对象后,这是正常的)。 所以我在想,也许我使用对象反序列化的方式不对


这里有什么问题?谢谢

为什么不打电话看看有没有东西要读?发布服务器端代码可能是值得的。目前我们只看到了事情的一面。

服务器端是什么样子的?如何结束连接?服务器不会结束连接。它序列化一个对象,然后通过outputstream.writeObject()将其发送到客户端。好的,对不起,我刚刚发现关闭连接的服务器上确实存在问题。但这是否准确?如果只接收到一半的对象二进制数据呢?它将在再次到达末尾时崩溃。我希望readObject()会一直阻塞,直到所有必需的数据都存在为止(除非发生异常情况)。别忘了,在幕后,TCP会为您维护数据的完整性和完整性。好吧,我尝试了available(),它似乎总是返回0,这可以解释EOFEException。但是我如何调试这个呢?我肯定在向客户端发送一个对象,所以它应该在那里。你发布服务器端了吗?那会有帮助的。在服务器端,您是否正在关闭和/或刷新连接?谢谢!是的,我在服务器端的writeObject()之后刷新。当使用InputStreamReader而不是ObjectInputStream检查套接字的inputstream时,我还可以在客户端看到消息。因此消息和对象肯定会到达客户端。