来自socket.getInputStream()的ObjectInputStream[英] ObjectInputStream from socket.getInputStream()

问题描述

我有服务器

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

服务器端或客户端都没有发生任何事情.一切都落在那条线上.客户端和服务器都试图从套筒中获取输入流,但它不起作用,客户端或服务器. 如何解决此问题,以便可以在客户端和服务器之间传递串行数据?

推荐答案

AS javadoc 说:

创建一个从指定的InputStream读取的ObjectInputStream.从流读取并进行了验证.该构造函数将阻塞,直到相应的ObjectOutputStream已编写并冲洗为标头.

因此,由于服务器和客户端都通过打开输入流开始,因此您实现了一个僵局:它们都阻止了另一方,直到另一方已发送流标头为止.如果您首先在客户端打开ObjectInputStream,则必须首先在服务器端(或Vice-viss-a)打开ObjectOutputStream(并立即刷新).

本文地址:https://www.itbaoku.cn/post/978566.html