我已经尝试了解决这个问题的所有解决方案。
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。其他地方告诉我刷新对象输出流。这段代码只是挂起程序,等待所谓的标题。
答案 0 :(得分:3)
Everything告诉我在ObjectInputStream之前声明objectInputStream。
不,它没有,它告诉你在ObjectOutputStream
之前构建ObjectInputStream
,而你正在这样做。
其他地方告诉我刷新Object输入流。
不,他们告诉你要冲洗ObjectOutputStream
,你也是这样做的。
准确阅读。
此代码只是暂停程序并等待所谓的标题。
这正是100%正确。关于它没有任何“所谓的”。没有任何写标题。对等体尚未构造其ObjectOutputStream
,并且此代码将阻塞,直到它执行,或断开连接,或网络退出。
事实上,同行甚至没有接受这种联系。您无法在同一个线程中运行所有此代码。 ServerSocket
需要一个单独的接受循环线程,该线程需要为每个接受的套接字启动另一个线程,以相同的顺序构造对象流。