模块 java.base

包 java.net


java.net
提供用于实现网络应用程序的类。

java.net包大致可以分为两部分:

  • 低级 API,它处理以下抽象:

    • 地址,它们是网络标识符,例如 IP 地址。

    • socket,这是基本的双向数据通信机制。

    • 接口,它描述了网络接口。

  • 高级 API,它处理以下抽象:

    • URIs, 代表通用资源标识符。

    • 网址, 代表通用资源定位器。

    • 连接, 表示与指向的资源的连接网址.

地址

地址在整个 java.net API 中用作主机标识符或套接字端点标识符。

InetAddress 类是表示 IP(互联网协议)地址的抽象。它有两个子类:

但是,在大多数情况下,不需要直接处理子类,因为 InetAddress 抽象应该涵盖大部分需要的功能。

关于 IPv6

并非所有系统都支持 IPv6 协议,虽然 Java 网络堆栈会尝试检测它并在可用时透明地使用它,但也可以通过系统属性禁用它。在 IPv6 不可用或明确禁用的情况下,Inet6Address 不再是大多数网络操作的有效参数。虽然像 InetAddress.getByName(java.lang.String) 这样的方法保证在查找主机名时不会返回 Inet6Address,但可以通过传递文字来创建这样的对象。在这种情况下,大多数方法在使用 Inet6Address 调用时都会抛出异常。

socket

套接字是通过网络在机器之间建立通信链接的手段。 java.net包提供了4种Sockets:

使用 TCP 套接字发送和接收是通过 InputStreams 和 OutputStreams 完成的,它们可以通过 Socket.getInputStream() Socket.getOutputStream() 方法获得。

接口

NetworkInterface 类提供 API 来浏览和查询本地机器的所有网络接口(例如以太网连接或 PPP 端点)。通过该类,您可以检查是否将任何本地接口配置为支持 IPv6。

请注意,所有符合标准的实现必须至少支持一个 NetworkInterface 对象,该对象必须连接到网络,或者是只能与同一台机器上的实体进行通信的“环回”接口。

高级API

java.net 包中的许多类确实提供了更高级别的抽象并允许轻松访问网络上的资源。这些类是:

  • URI 是表示通用资源标识符的类,如 RFC 2396 中指定的那样。顾名思义,这只是一个标识符,并不直接提供访问资源的方法。
  • URL 是表示通用资源定位器的类,它既是 URI 的较旧概念,也是访问资源的一种方式。
  • 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 的主要区别,因此不需要访问协议处理程序。因此,虽然可以使用任何类型的协议方案(例如 myproto://myhost.mydomain/resource/ )创建 URI,但类似的 URL 将尝试实例化指定协议的处理程序;如果它不存在,将抛出异常。

默认情况下,协议处理程序是从默认位置动态加载的。但是,可以将其他协议处理程序部署为 services URLStreamHandlerProvider 类型的服务提供者位于运行时,如 网址构造器 中所指定。

附加规格

自从:
1.0
  • 描述
    类 Authenticator 表示一个对象,该对象知道如何获取网络连接的身份验证。
    请求身份验证的实体的类型。
    尝试将套接字绑定到本地地址和端口时发生错误的信号。
    表示 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) 表示之间转换国际化域名 (IDN) 的方法。
    此类表示 Internet 协议版本 4 (IPv4) 地址。
    此类表示 Internet 协议版本 6 (IPv6) 地址。
    此类表示 Internet 协议 (IP) 地址。
    这个类实现了一个IP Socket Address(IP地址+端口号)也可以是一对(主机名+端口号),在这种情况下会尝试解析主机名。
    此类表示网络接口地址。
    到 Java ARchive (JAR) 文件或 JAR 文件中条目的 URL 连接。
    抛出以指示出现格式错误的 URL。
    MulticastSocket 是一个数据报套接字,方便发送和接收 IP 多播数据报。
    此类用于各种网络权限。
    此类表示由名称和分配给此接口的 IP 地址列表组成的网络接口。
    尝试将套接字连接到远程地址和端口时发生错误的信号。
    类 PasswordAuthentication 是 Authenticator 使用的数据持有者。
    表示已在连接的数据报上收到 ICMP 端口不可达消息。
    抛出表示底层协议有错误,比如TCP错误。
    表示一系列通信协议。
    此类表示代理设置,通常是类型(http、socks)和套接字地址。
    表示代理类型。
    选择在连接到 URL 引用的网络资源时要使用的代理服务(如果有)。
    表示 URLConnection 缓存的实现。
    表示最初通过安全方式(例如 TLS)检索到的缓存响应。
    此类实现服务套接字。
    此类实现客户端套接字(也称为“套接字”)。
    此类表示没有协议附件的套接字地址。
    抛出以指示创建或访问 Socket 时出错。
    抽象类 SocketImpl 是所有实际实现套接字的类的公共超类。
    该接口为套接字实现定义了一个工厂。
    与套接字关联的套接字选项。
    获取/设置套接字选项的方法接口。
    此类表示通过套接字访问网络。
    表示套接字读取或接受超时已发生的信号。
    定义通信协议的标准系列。
    定义 standard 套接字选项。
    Unix 域套接字地址。
    抛出表示无法确定主机的 IP 地址。
    抛出表示发生了未知的服务异常。
    表示统一资源标识符 (URI) 引用。
    抛出的已检查异常表明无法将字符串解析为 URI 引用。
    URL 表示统一资源定位器,指向万维网上“资源”的指针。
    此类加载器用于从引用 JAR 文件和目录的 URL 的搜索路径加载类和资源。
    抽象类 URLConnection 是代表应用程序和 URL 之间的通信链接的所有类的超类。
    用于 HTML 表单解码的实用程序类。
    用于 HTML 表单编码的实用程序类。
    表示访问由给定 url 定义的资源或一组资源的权限,以及一组给定的用户可设置的请求方法和请求标头。
    抽象类 URLStreamHandler 是所有流协议处理程序的通用超类。
    该接口为 URL 流协议处理程序定义了一个工厂。