我正在尝试创建一个在互联网上运行的多人游戏。问题是我正在尝试获取流上的输入,但由于某种原因我无法使用一个套接字创建 2 个流,我将解释一下:
Socket s=new Socket("127.0.0.1",5001);
ObjectInputStream obj1=new ObjectInputStream(s.getInputStream());
ObjectInputStream obj2=new ObjectInputStream(s.getInputStream());
有人可以解释一下为什么这个代码片段不起作用吗?
编辑:这是不起作用的代码示例的另一个示例。
while (true) {
try {
objI = new ObjectInputStream(sock.getInputStream());
objO = new ObjectOutputStream(sock.getOutputStream());
}catch(Exception e) {
e.printStackTrace();
}
}
编辑2:非常感谢您的回答。我尝试刷新对象,但不断收到此错误:
java.io.StreamCorruptedException: invalid stream header: 33740003
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at Proccess.run(Proccess.java:22)
at java.lang.Thread.run(Unknown Source)
流是stateful- 当您从流中读取时,您正在从流中的某个位置读取,并通过这样做来更改位置。
如果两个事物(比如两个包装器 ObjectInputStream)同时从底层流中读取,它们都会尝试更改流中的位置,但两者都不知道对方在做什么。因此,从一个读取会改变位置,然后另一个期望流位于它离开的位置,但事实并非如此。
想象一下,你得到的答案是写在不同的纸上的,一张一张地给你的。但是当你正在阅读这些纸片时,在你看到它们之前,其他人就拿走了其中的一些——你得到的东西没有意义。这就是正在发生的事情 - 一个流带走了部分数据,当另一个流再次查看数据时,其中一些数据丢失了,被另一个流消耗了。
Have one读取传入对象的 ObjectInputStream。如果要将这些对象发布给多个使用者,请创建一个事物集合来将传入对象发送到其中,然后迭代它们并将新对象传递给每个使用者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)