ObjectInputStream 构造函数挂起程序
ObjectInputStream constructor hangs program
我已经尝试了所有我能找到的解决这个问题的方法。
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");
一切都告诉我在 ObjectInputStream 之前声明 objectInputStream。其他地方告诉我刷新对象输出流。这段代码只是把程序挂了,等待所谓的header。
Everything tells me to declare the objectInputStream before the ObjectInputStream.
不,它不会,它告诉您在 ObjectInputStream
之前构建 ObjectOutputStream
,而您正在这样做。
Other places tell me to flush the Object input stream.
不,他们告诉你要冲水 ObjectOutputStream
,而你也在这样做。
请准确阅读。
This code just hangs the program and waits waiting for the so-called header.
100% 正确。没有什么 'so-called' 。而且 没有写 header。对等方尚未构建其 ObjectOutputStream
,此代码将阻塞直到它构建、断开连接或网络中断。
事实上对方甚至还没有接受连接。您不能 运行 所有这些代码都在同一个线程中。 ServerSocket
需要一个单独的 accept-loop 线程,并且该线程需要为每个接受的套接字启动另一个线程,该套接字以相同的顺序构造 object 流。
我已经尝试了所有我能找到的解决这个问题的方法。
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");
一切都告诉我在 ObjectInputStream 之前声明 objectInputStream。其他地方告诉我刷新对象输出流。这段代码只是把程序挂了,等待所谓的header。
Everything tells me to declare the objectInputStream before the ObjectInputStream.
不,它不会,它告诉您在 ObjectInputStream
之前构建 ObjectOutputStream
,而您正在这样做。
Other places tell me to flush the Object input stream.
不,他们告诉你要冲水 ObjectOutputStream
,而你也在这样做。
请准确阅读。
This code just hangs the program and waits waiting for the so-called header.
100% 正确。没有什么 'so-called' 。而且 没有写 header。对等方尚未构建其 ObjectOutputStream
,此代码将阻塞直到它构建、断开连接或网络中断。
事实上对方甚至还没有接受连接。您不能 运行 所有这些代码都在同一个线程中。 ServerSocket
需要一个单独的 accept-loop 线程,并且该线程需要为每个接受的套接字启动另一个线程,该套接字以相同的顺序构造 object 流。