Java套接字:程序停在socket.getInputStream()没有错误?

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-line上的最后一个生命值。 没有抛出exception。 为什么会这样? 我不明白……

args [0]是5000. //编辑:flush没有帮助。

这是因为如果inputStream为空,则ObjectInputStream(InputStream in) -constructor是一个阻塞调用。

Quote :

创建一个从指定的InputStream读取的ObjectInputStream。 从流中读取序列化流头并进行validation。 此构造函数将阻塞,直到相应的ObjectOutputStream已写入并刷新标头。

可能的话,

 link.getInputStream(); 

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

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

从这里开始,您将ObjectInputStream声明为没有强制转换的ObjectOutputStream(此处不合适)

你应该试试:

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

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

告诉我这是否有效:D