【问题标题】:ObjectInputStream from socket.getInputStream()来自 socket.getInputStream() 的 ObjectInputStream
【发布时间】:2014-01-31 06:20:18
【问题描述】:

我有服务器

ServerSocket socketListener = new ServerSocket(Config.PORT);
...
client = socketListener.accept();

和客户

sock = new Socket("127.0.0.1", Config.PORT);

我想使用 ObjectInputStream 和 ObjectOutputStream 在它们之间传输一些序列化数据。 当我尝试做

ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());

服务器端和客户端都不会发生任何事情。一切都落在那条线上。客户端和服务器都试图从套接字获取输入流,但它不起作用,客户端和服务器都不起作用。 我该如何解决这个问题,以便我可以在客户端和服务器之间传递序列化数据?

【问题讨论】:

    标签: java multithreading sockets client-server java-io


    【解决方案1】:

    正如the javadoc 所说:

    创建一个从指定 InputStream 读取的 ObjectInputStream。从流中读取序列化流标头并进行验证。此构造函数将阻塞,直到相应的 ObjectOutputStream 写入并刷新了标头。

    因此,由于服务器和客户端都是从打开 InputStream 开始的,因此您实现了死锁:它们都阻塞,直到对方发送了流标头。如果您首先在客户端打开 ObjectInputStream,则必须首先在服务器端打开 ObjectOutputStream(并在必要时立即刷新)(反之亦然)。

    【讨论】:

    • 我知道这是个僵局! :) 显然我没有仔细看文档。非常感谢。
    猜你喜欢
    • 2012-01-12
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2017-04-17
    • 2013-06-06
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多