我有服务器
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 http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#ObjectInputStream%28java.io.InputStream%29 says:
创建一个从指定的 InputStream 读取的 ObjectInputStream。从流中读取序列化流标头并进行验证。此构造函数将阻塞,直到相应的 ObjectOutputStream 写入并刷新标头。
因此,由于服务器和客户端都是通过打开 InputStream 来启动的,因此您实现了死锁:它们都会阻塞,直到另一方发送了流标头。如果首先在客户端打开 ObjectInputStream,则必须首先在服务器端打开 ObjectOutputStream(并在必要时立即刷新)(反之亦然)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)