【问题标题】:Interruptible Socket Read Java可中断套接字读取 Java
【发布时间】:2012-07-21 06:12:32
【问题描述】:

我正在尝试在 java 中创建一个相当简单的客户端/服务器应用程序。客户端有两个线程,服务器有两个线程(每个客户端),一个用于输入和输出。我通过对象流几乎不断地双向发送数据。读取()块。我需要能够中断 read() 线程(即断开连接)。我该怎么做?

【问题讨论】:

  • 认为link 真的可以帮助你。
  • 你尝试过使用非阻塞读取套接字吗?还要有一个循环来不断检查条件,以便在需要断开连接时可以在非阻塞读取返回后断开连接?您可以使用 NIO 或 setSoTimeout 创建非阻塞套接字。

标签: java sockets networking stream client-server


【解决方案1】:

关闭套接字以进行输入。这将导致阻塞读取抛出EOFException,然后它应该关闭套接字并退出线程。

【讨论】:

    【解决方案2】:

    您可以使用非阻塞调用或在线程上使用Interrupt method。一旦中断,读取操作将抛出一个异常,您可以很好地捕获并结束线程。

    【讨论】:

    • 只有在套接字是 InterruptibleChannel 时才如此。
    【解决方案3】:

    关闭Socketread 方法将被IOException 中断。处理该异常以清理您的线程。

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2021-03-04
      • 2013-10-12
      • 1970-01-01
      • 2016-10-05
      • 2010-09-11
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多