【问题标题】:Java sockets: Program stops at socket.getInputStream() w/o error?Java 套接字:程序在 socket.getInputStream() 处停止,没有错误?
【发布时间】:2011-11-18 17:07:24
【问题描述】:
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());

“输入流之前”是命令行上的最后一个生命标志。没有抛出异常。为什么会这样?没看懂……

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

【问题讨论】:

  • 您是否从调试器中运行过它?也许这会破坏代码并让您了解正在发生的事情。
  • @Brian 在构造函数中自动连接。
  • @user 代码中的最后一行无法编译。 ..Input.. out = new ..Output..
  • 显然我记错了。我的立场是正确的:)
  • 还有:ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

标签: java sockets serialization


【解决方案1】:

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

Quote:

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

【讨论】:

  • 所以如果我首先在客户端和服务器端制作输出流,那应该可以吗?有趣....我会试一试。谢谢。
  • 好吧。如果我交换它的工作流的创建。就像下面写的那样,ObjectInputStream out-thing 只是一个错字。谢谢@所有人!
  • 非常基本的东西,但非常有必要知道。谢谢你救了我的日子
【解决方案2】:

可能,

link.getInputStream(); 

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

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

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

你应该试试:

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

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

告诉我这是否有效:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2017-04-08
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多