首页 > 解决方案 > 为什么 ServerSocketChannel#bind 需要 API 级别 24?

问题描述

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

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

但是上面的代码给了我一个错误,说 - Call requires API level 24。理论上,我可以使用ServerSocket并收工,但我的客户端代码正在使用SocketChannelByteBuffer,将两者混合起来感觉就像一个糟糕的设计!

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

标签: javaandroidnio

解决方案


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

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

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


推荐阅读