ObjectInputStream构造函数挂起程序

时间:2017-11-22 02:43:01

标签: java sockets server client objectinputstream

我已经尝试了解决这个问题的所有解决方案。

server = new ServerSocket(9421);
client = new Socket("localhost", 9421);
out = new ObjectOutputStream(client.getOutputStream());
out.flush();
System.out.println("Starting input streams");
in = new ObjectInputStream(client.getInputStream());
System.out.println("input streams are now running");

Everything告诉我在ObjectInputStream之前声明objectInputStream。其他地方告诉我刷新对象输出流。这段代码只是挂起程序,等待所谓的标题。

1 个答案:

答案 0 :(得分:3)

  

Everything告诉我在ObjectInputStream之前声明objectInputStream。

不,它没有,它告诉你在ObjectOutputStream之前构建ObjectInputStream,而你正在这样做。

  

其他地方告诉我刷新Object输入流。

不,他们告诉你要冲洗ObjectOutputStream,你也是这样做的。

准确阅读。

  

此代码只是暂停程序并等待所谓的标题。

这正是100%正确。关于它没有任何“所谓的”。没有任何标题。对等体尚未构造其ObjectOutputStream,并且此代码将阻塞,直到它执行,或断开连接,或网络退出。

事实上,同行甚至没有接受这种联系。您无法在同一个线程中运行所有此代码。 ServerSocket需要一个单独的接受循环线程,该线程需要为每个接受的套接字启动另一个线程,以相同的顺序构造对象流。