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

时间:2011-11-18 17:07:25

标签: java sockets serialization

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

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

2 个答案:

答案 0 :(得分:18)

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

Quote

  

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

答案 1 :(得分:0)

可能,

link.getInputStream(); 

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

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

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

你应该尝试:

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

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

告诉我这是否有效:D