Java 套接字:程序在套接字处停止。getInputStream() w/o error?

2022-09-04 08:35:16
InetAddress host = InetAddress.getLocalHost();
Socket link = new Socket(host, Integer.parseInt(args[0]));
System.out.println("before input stream");
ObjectInputStream in = new ObjectInputStream(link.getInputStream());
System.out.println("before output stream");
ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

“在输入流之前”是 cmd 行上的最后一个生命体征。没有引发异常。为什么会发生这种情况?我不明白。。。

args[0] 是 5000。编辑:冲洗没有帮助。


答案 1

这是因为如果 inputStream 为空,则 -构造函数是阻塞调用。ObjectInputStream(InputStream in)

引用

创建从指定的输入流读取的对象输入流。从流中读取序列化流标头并进行验证。此构造函数将阻塞,直到相应的 ObjectOutputStream 写入并刷新标头。


答案 2

可能

link.getInputStream(); 

可能返回 null,尽管这应该通过查看类文件返回错误。我注意到的另一件事是,你声明:

ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

由此,您将ObjectInputStream声明为没有强制转换的ObjectOutputStream(无论如何在这里都不合适)

你应该试试:

ObjectOutputStream out = new ObjectOutputStream(link.getOutputStream());

这应该有效,因为脚本可能会在 System.out 中排队,但在初始化之前请注意该错误。

告诉我这是否有效:D