Package java.net
java.net包大致可分为两个部分:
-
低级API,处理以下抽象概念:
-
地址,即网络标识符,如IP地址。
-
套接字,即基本的双向数据通信机制。
-
接口,描述网络接口。
-
-
高级API,处理以下抽象概念:
-
URI,表示通用资源标识符。
-
URL,表示通用资源定位符。
-
连接,表示连接到由URLs指向的资源。
-
地址
地址在java.net API中被用作主机标识符或套接字端点标识符。
InetAddress
类是表示IP(Internet Protocol)地址的抽象。它有两个子类:
Inet4Address
用于IPv4地址。Inet6Address
用于IPv6地址。
但在大多数情况下,没有必要直接处理子类,因为InetAddress抽象应该涵盖大部分所需功能。
关于IPv6
并非所有系统都支持IPv6协议,虽然Java网络堆栈会尝试在可用时透明地检测并使用它,但也可以通过系统属性禁用其使用。在IPv6不可用或明确禁用的情况下,Inet6Address不再是大多数网络操作的有效参数。虽然像InetAddress.getByName(java.lang.String)
这样的方法在查找主机名时保证不会返回Inet6Address,但通过传递文字,可以创建这样的对象。在这种情况下,大多数方法在使用Inet6Address时将抛出异常。
套接字
套接字是在网络上建立机器之间通信链接的手段。java.net包提供了4种类型的套接字:
Socket
是TCP客户端API,通常用于连接到远程主机。ServerSocket
是TCP服务器API,通常用于接受来自客户端套接字的连接。DatagramSocket
是UDP端点API,用于发送和接收数据报包。MulticastSocket
是DatagramSocket
的子类,用于处理多播组。
使用TCP套接字发送和接收通过InputStreams和OutputStreams完成,可以通过Socket.getInputStream()
和Socket.getOutputStream()
方法获取。
接口
NetworkInterface
类提供了浏览和查询本地机器的所有网络接口(例如以太网连接或PPP端点)的API。通过该类,您可以检查本地接口是否配置为支持IPv6。
请注意,所有符合规范的实现必须支持至少一个NetworkInterface
对象,该对象必须连接到网络,或者是一个只能与同一台机器上的实体通信的“环回”接口。
高级API
java.net包中的许多类提供了更高级别的抽象,并允许轻松访问网络资源。这些类包括:
URI
是表示通用资源标识符的类,如RFC 2396中所指定的。正如名称所示,这只是一个标识符,不直接提供访问资源的手段。URL
是表示通用资源定位符的类,既是URIs的旧概念,也是访问资源的手段。URLConnection
是从URL创建的通信链接,用于访问URL指向的资源。这个抽象类将大部分工作委托给底层的协议处理程序,如http或https。HttpURLConnection
是URLConnection的子类,提供了一些特定于HTTP协议的附加功能。这个API已被更新的HTTP客户端API取代。
推荐的用法是使用URI
标识资源,然后在访问资源时将其转换为URL
。从该URL,您可以获取URLConnection
以进行精细控制,或直接获取InputStream。
这里是一个示例:
URI uri = new URI("http://www.example.com/"); URL url = uri.toURL(); InputStream in = url.openStream();
协议处理程序
如前所述,URL和URLConnection依赖于必须存在的协议处理程序,否则将抛出异常。这与仅标识资源的URI的主要区别在于,URI不需要访问协议处理程序。因此,虽然可以使用任何类型的协议方案(例如myproto://myhost.mydomain/resource/
)创建URI,但类似的URL将尝试为指定的协议实例化处理程序;如果不存在,则会抛出异常。
默认情况下,协议处理程序会动态从默认位置加载。但也可以将额外的协议处理程序部署为services
。类型为URLStreamHandlerProvider的服务提供程序在运行时定位,如在URL构造函数中指定。
附加规范
- 自:
- 1.0
-
ClassDescriptionAuthenticator类表示一个对象,知道如何为网络连接获取身份验证。请求身份验证的实体类型。在尝试将套接字绑定到本地地址和端口时发生错误时发出的信号。表示用于存储ResponseCache中资源的通道。表示用于从ResponseCache中检索资源的通道。在尝试将套接字连接到远程地址和端口时发生错误时发出的信号。抽象类
ContentHandler
是从URLConnection
读取Object
的所有类的超类。此接口定义了内容处理程序的工厂。CookieHandler对象提供了一个回调机制,将HTTP状态管理策略实现连接到HTTP协议处理程序中。CookieManager提供了CookieHandler
的具体实现,将cookie的存储与接受和拒绝cookie的策略分开。CookiePolicy实现决定哪些cookie应该被接受,哪些应该被拒绝。CookieStore对象表示cookie的存储。此类表示数据报包。此类表示用于发送和接收数据报包的套接字。抽象数据报和多播套接字实现基类。此接口定义了数据报套接字实现的工厂。提供了一种将文件名和MIME类型字符串之间进行映射的机制的简单接口。HttpCookie对象表示HTTP cookie,用于在服务器和用户代理之间传递状态信息。表示需要重试HTTP请求但由于启用了流模式无法自动重试的异常。支持HTTP特定功能的URLConnection。提供了在普通Unicode表示和ASCII兼容编码(ACE)表示之间转换国际化域名(IDNs)的方法。此类表示Internet协议版本4(IPv4)地址。此类表示Internet协议版本6(IPv6)地址。此类表示Internet协议(IP)地址。此类实现IP套接字地址(IP地址+端口号)。也可以是一对(主机名+端口号),在这种情况下,将尝试解析主机名。此类表示网络接口地址。到Java ARchive(JAR)文件或JAR文件中条目的URL连接。表示发生了格式错误的URL时抛出的异常。MulticastSocket
是一个方便发送和接收IP多播数据报的数据报套接字。用于各种网络权限的类。此类表示由名称和分配给此接口的IP地址列表组成的网络接口。表示尝试连接套接字到远程地址和端口时发生错误。PasswordAuthentication类是Authenticator使用的数据持有者。表示在连接的数据报上收到ICMP端口不可达消息。表示底层协议存在错误,如TCP错误。代表通信协议族。该类表示代理设置,通常是类型(http,socks)和套接字地址。代表代理类型。在连接到URL引用的网络资源时,选择要使用的代理服务器(如果有)。代表URLConnection缓存的实现。代表最初通过安全方式(如TLS)检索的缓存响应。该类实现服务器套接字。该类实现客户端套接字(也称为“套接字”)。该类表示没有协议附加的套接字地址。表示创建或访问套接字时出现错误。抽象类SocketImpl是实际实现套接字的所有类的共同超类。该接口定义了套接字实现的工厂。SocketOption<T>与套接字关联的套接字选项。获取/设置套接字选项的方法接口。该类表示通过套接字访问网络。表示套接字读取或接受超时。定义通信协议的标准族。定义标准套接字选项。Unix域套接字地址。表示无法确定主机的IP地址。表示发生未知服务异常。表示统一资源标识符(URI)引用。抛出以指示字符串无法解析为URI引用的已检查异常。类URL表示统一资源定位符,指向万维网上的“资源”。该类加载器用于从引用JAR文件和目录的URL搜索路径加载类和资源。抽象类URLConnection是表示应用程序与URL之间通信链接的所有类的超类。用于HTML表单解码的实用程序类。用于HTML表单编码的实用程序类。表示访问由给定URL定义的资源或一组资源的权限,并针对给定的可设置用户请求方法和请求标头。抽象类URLStreamHandler是所有流协议处理程序的共同超类。该接口定义了URL流协议处理程序的工厂。