如何识别“Socket closed”异常

时间:2018-05-06 19:53:37

标签: java android

我有一个ServerSocket等待接受连接。在另一个线程上收到某个事件后,我关闭套接字,使其不再等待连接。我收到带有“ Socket closed ”消息的 java.net.SocketException 。问题是,如何识别“Socket closed”异常。我可以使用异常消息来执行此操作,但我觉得这不是我应该如何处理异常。

我查了一下文档: https://docs.oracle.com/javase/9/docs/api/java/net/SocketException.html

SocketException类有许多子类,但我找不到任何引用“Socket closed”的东西。是否可以使用异常消息来识别它?这条消息可能会改变,也许是在另一个平台上或其他什么地方?

以下是一些代码:

static void jdbcTemplateExample() {
    DataSource ds = DataSourceBuilder
            .create()
            .username(username)
            .password(password)
            .url(url)
            .build();

    JdbcTemplate jt = new JdbcTemplate(ds);

    List<Object> results = jt.query("SELECT * FROM table", (ResultSet rs, int rowNum) -> {
        //Create whatever Object you want with the resultSet.
        //Will convert to Map as example.
        Map results = new HashMap<>();
        ResultSetMetaData md = rs.getMetaData();
        int columns = md.getColumnCount();
        for (int i = 1; i <= columns; ++i) {
            results.put(md.getColumnName(i), rs.getObject(i));
        }
        return results;
    });

    //use the results
}

1 个答案:

答案 0 :(得分:0)

更好的方法是:

  1. 定义'停止'标志。
  2. 当您希望服务器停止接受时设置它。
  3. 在服务器套接字上设置一个短暂的套接字超时,比如几秒钟。
  4. 当您获得连接或发生超时时,请检查该标志,然后继续进行。