我有服务器
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());
在服务器端和客户端都没有任何事情发生。一切都落在那条线上。客户端和服务器都试图从套接字获取输入流,但它既不起作用,也不起作用,也不起作用。 如何解决此问题,以便我可以在客户端和服务器之间传递序列化数据?
答案 0 :(得分:1)
正如the javadoc所说:
创建一个从指定的InputStream读取的ObjectInputStream。从流中读取序列化流头并进行验证。此构造函数将阻塞,直到相应的ObjectOutputStream已写入并刷新标头。
因此,由于服务器和客户端都是通过打开InputStream开始的,因此实现了死锁:它们都会阻塞,直到另一方发送了流头。如果从客户端打开ObjectInputStream开始,则必须首先在服务器端打开ObjectOutputStream(并在必要时立即刷新)(反之亦然)。