Mei*_*aft 0 java sockets serialization
我有一个游戏的服务器/客户端模型,但它一直卡在ObjectInputStream初始化中。
下面是客户端启动方法的代码:
public void start(){
try {
Socket s = new Socket("127.0.0.1", 24680);
Thread.sleep(1000);
ois = new ObjectInputStream(s.getInputStream()); // stuck here
oos = new ObjectOutputStream(s.getOutputStream());
startGame();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是服务器代码:
try {
InputStream fis = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(fis);
while (true) {
ArrayList < Dot > lists = (ArrayList < Dot > ) ois.readObject();
for (Socket s: sockets) {
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(lists);
}
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
你需要建造ObjectOutputStream 前的ObjectInputStream在至少一端,最好是两个,以免发生意外。否则会new ObjectInputStream()阻止尝试读取对等方尚未写入的流标头new ObjectOutputStream(),因为他也被阻止new ObjectInputStream().
其他注意事项:
ObjectOutputStreams您将继续编写新的流标头,这是对等方不会期望或理解的。sleep(). 网络代码中不需要睡眠。他们只是在浪费时间。Cargo-cult 编程。