socket.getInputStream()中的ObjectInputStream

时间:2014-01-12 13:54:57

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

我有服务器

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

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

1 个答案:

答案 0 :(得分:1)

正如the javadoc所说:

  

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

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