Module java.base

Package java.net


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

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

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

    • 地址,即网络标识符,如IP地址。

    • 套接字,即基本的双向数据通信机制。

    • 接口,描述网络接口。

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

    • URI,表示通用资源标识符。

    • URL,表示通用资源定位符。

    • 连接,表示连接到由URLs指向的资源。

地址

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

InetAddress类是表示IP(Internet Protocol)地址的抽象。它有两个子类:

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

关于IPv6

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

套接字

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

使用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
  • Class
    Description
    Authenticator类表示一个对象,知道如何为网络连接获取身份验证。
    请求身份验证的实体类型。
    在尝试将套接字绑定到本地地址和端口时发生错误时发出的信号。
    表示用于存储ResponseCache中资源的通道。
    表示用于从ResponseCache中检索资源的通道。
    在尝试将套接字连接到远程地址和端口时发生错误时发出的信号。
    抽象类ContentHandler是从URLConnection读取Object的所有类的超类。
    此接口定义了内容处理程序的工厂。
    CookieHandler对象提供了一个回调机制,将HTTP状态管理策略实现连接到HTTP协议处理程序中。
    CookieManager提供了CookieHandler的具体实现,将cookie的存储与接受和拒绝cookie的策略分开。
    CookiePolicy实现决定哪些cookie应该被接受,哪些应该被拒绝。
    CookieStore对象表示cookie的存储。
    此类表示数据报包。
    此类表示用于发送和接收数据报包的套接字。
    抽象数据报和多播套接字实现基类。
    此接口定义了数据报套接字实现的工厂。
    提供了一种将文件名和MIME类型字符串之间进行映射的机制的简单接口。
    HttpCookie对象表示HTTP cookie,用于在服务器和用户代理之间传递状态信息。
    表示需要重试HTTP请求但由于启用了流模式无法自动重试的异常。
    支持HTTP特定功能的URLConnection。
    IDN
    提供了在普通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是实际实现套接字的所有类的共同超类。
    该接口定义了套接字实现的工厂。
    与套接字关联的套接字选项。
    获取/设置套接字选项的方法接口。
    该类表示通过套接字访问网络。
    表示套接字读取或接受超时。
    定义通信协议的标准族。
    定义标准套接字选项。
    Unix域套接字地址。
    表示无法确定主机的IP地址。
    表示发生未知服务异常。
    URI
    表示统一资源标识符(URI)引用。
    抛出以指示字符串无法解析为URI引用的已检查异常。
    URL
    类URL表示统一资源定位符,指向万维网上的“资源”。
    该类加载器用于从引用JAR文件和目录的URL搜索路径加载类和资源。
    抽象类URLConnection是表示应用程序与URL之间通信链接的所有类的超类。
    用于HTML表单解码的实用程序类。
    用于HTML表单编码的实用程序类。
    表示访问由给定URL定义的资源或一组资源的权限,并针对给定的可设置用户请求方法和请求标头。
    抽象类URLStreamHandler是所有流协议处理程序的共同超类。
    该接口定义了URL流协议处理程序的工厂。