【问题标题】:Why does ServerSocketChannel#bind require API level 24?为什么 ServerSocketChannel#bind 需要 API 级别 24?
【发布时间】:2020-10-17 10:57:28
【问题描述】:

我正在尝试在 Android 上打开 NIO 服务器套接字通道,如下所示(最低 API 21)。

ServerSocketChannel.open().also {
    it.bind(InetSocketAddress(0))
}

但是上面的代码给了我一个错误,说 - 调用需要 API 级别 24。理论上,我可以使用ServerSocket 并收工,但我的客户端代码使用SocketChannelByteBuffer 等,将两者混合使用感觉很糟糕!

让我感到困惑的另一件事是,我可以在最低 API 级别 21 上 open() 它,但在 API 级别 21 上却不能 bind() 它,那么它有什么用途?

【问题讨论】:

  • 您可以使用ServerSocketChannel.socket() 获取底层ServerSocket 并调用bind()ServerSocketChannel.bind() 是在 Java 1.7 中添加的。不要问我这与 API 级别 24 有何关系。
  • @MarquisofLorne 感谢您的建议!我最终只这样做了。

标签: java android nio


【解决方案1】:

目前,我找到了另一种方法来绑定服务器套接字并仍然使用ServerSocketChannel,而无需将 API 级别更改为 24。

ServerSocketChannel.open().also {
    it.socket().bind(InetSocketAddress(0))
}

我仍然对将 ServerSocketChannel#bind 添加到 API 级别 24 的决定感到困惑。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2020-07-12
    • 2013-02-26
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多