Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息,请参阅JDK发行说明。
所有使用TCP的API都可以使用SDP,特别包括以下类:
java.net
包
Socket
ServerSocket
java.nio.channels
包:
SocketChannel
ServerSocketChannel
AsynchronousSocketChannel
AsynchronousServerSocketChannel
当启用SDP支持时,代码无需任何更改即可正常工作。不需要重新编译。但是,需要知道套接字只绑定一次。连接是隐式绑定的。因此,如果套接字尚未先前绑定,并且调用了connect
,则绑定将在那个时候发生。
例如,考虑以下代码片段:
AsynchronousSocketChannel ch = AsynchronousSocketChannel.open(); ch.bind(local); Future<Void> result = ch.connect(remote);
在这个片段中,异步套接字通道在套接字上调用bind
时绑定到本地TCP地址。然后,代码尝试使用相同的套接字连接到远程地址。如果远程地址使用了配置文件中指定的InfiniBand,连接将不会转换为SDP,因为套接字先前已经绑定。