java - 为什么 ServerSocketChannel#bind 需要 API 级别 24?
问题描述
我正在尝试在 Android 上打开 NIO 服务器套接字通道,如下所示(最小 API 21)。
ServerSocketChannel.open().also {
it.bind(InetSocketAddress(0))
}
但是上面的代码给了我一个错误,说 - Call requires API level 24。理论上,我可以使用ServerSocket
并收工,但我的客户端代码正在使用SocketChannel
等ByteBuffer
,将两者混合起来感觉就像一个糟糕的设计!
让我感到困惑的另一件事是,我可以open()
在最低 API 级别 21 上使用它,但不能bind()
在 API 级别 21 上使用它,那么它的用途是什么?
解决方案
现在,我找到了另一种方法来绑定服务器套接字并仍然使用ServerSocketChannel
而不将 API 级别更改为 24。
ServerSocketChannel.open().also {
it.socket().bind(InetSocketAddress(0))
}
我仍然对添加ServerSocketChannel#bind
到 API 级别 24 的决定感到困惑。
推荐阅读
- android - 使用 Glide 加载 XML 向量是否明智
- reactjs - 从 React.js 中的状态数组呈现特定值
- android - 返回结果和lateinit:属性执行尚未初始化
- reactjs - 关于功能性 React 最佳实践的建议
- datatable - 如何添加下载到我的应用程序的功能
- javascript - VM101:1 未捕获的语法错误:JSON.parse 中位置 0 处的 JSON 中的意外标记 <
) 在 XMLHttpRequest.xhr.onload (app.js:134) - eclipse - 在 Eclipse 上使用来自 SVN 的单独源文件夹
- java - 错误:“未提供名称属性”- 用于 log4j2.properties 自定义
- r - 重叠散点图、线穿过散点图和密度图
- wcf - 在本地使用证书测试 WCF 服务