Package java.net
java.net包可以大致分为两部分:
低级API ,涉及以下抽象:
地址 ,它们是网络标识符,如IP地址。
套接字是基本的双向数据通信机制。
接口 ,描述网络接口。
高级API ,涉及以下抽象:
URI ,表示通用资源标识符。
网址 ,代表普遍资源定位器。
连接 ,表示与URL指向的资源的连接。
地址
java.net API中的地址用作主机标识符或套接字端点标识符。
InetAddress
类是代表IP(互联网协议)地址的抽象。 它有两个子类:
-
Inet4Address
的IPv4地址。 -
Inet6Address
的IPv6地址。
但是,在大多数情况下,不需要直接处理子类,因为InetAddress抽象应该涵盖大部分所需的功能。
关于IPv6
并非所有系统都支持IPv6协议,而当Java网络堆栈尝试检测到它并在可用时可以透明地使用它,也可以使用系统属性禁用它。 在IPv6不可用或显式禁用的情况下,Inet6Address对于大多数网络操作来说不是有效参数。 尽管如InetAddress.getByName(java.lang.String)
这样的方法保证在查找主机名时不会返回Inet6Address,但通过传递文字可以创建这样一个对象。 在这种情况下,大多数方法在使用Inet6Address调用时都会抛出异常。
套接字
插座是通过网络在机器之间建立通信链路的手段。 java.net包提供了4种套接字:
-
Socket
是TCP客户端API,通常用于远程主机的connect 。 -
ServerSocket
是一个TCP服务器API,通常来自客户端套接字的accept连接。 -
DatagramSocket
是UDP端点API,用于send和receive datagram packets 。 -
MulticastSocket
是处理组播组时使用的DatagramSocket
的子类。
使用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://java.sun.com/");
URL url = uri.toURL();
InputStream in = url.openStream();
协议处理程序
如前所述,URL和URLConnection依赖于必须存在的协议处理程序,否则抛出异常。 这是与仅识别资源的URI的主要区别,因此不需要访问协议处理程序。 因此,尽管可以使用任何类型的协议方案(例如,myproto://myhost.mydomain/resource/
)创建URI,但类似的URL将尝试实例化指定协议的处理程序;
如果不存在,将抛出异常。
默认情况下,协议处理程序是从默认位置动态加载的。 然而,可以部署其他协议处理程序为services
。 类型为URLStreamHandlerProvider的服务提供商位于运行时,如URL constructor中所述。
附加规格
- 从以下版本开始:
- 1.0
-
接口摘要 接口 描述 ContentHandlerFactory 该界面为内容处理程序定义了一个工厂。CookiePolicy CookiePolicy实现决定哪些Cookie应该被接受,哪些应该被拒绝。CookieStore CookieStore对象表示Cookie的存储。DatagramSocketImplFactory 该接口为数据报套接字实现定义了一个工厂。FileNameMap 一个简单的界面,提供了一种在文件名和MIME类型字符串之间映射的机制。ProtocolFamily 代表一系列通信协议。SocketImplFactory 该接口定义了一个工厂用于套接字实现。SocketOption<T> 与套接字关联的套接字选项。SocketOptions 获取/设置套接字选项的方法的接口。URLStreamHandlerFactory 该接口为URL
流协议处理程序定义了一个工厂。 -
类摘要 Class 描述 Authenticator Authenticator类代表一个知道如何获取网络连接认证的对象。CacheRequest 表示在ResponseCache中存储资源的通道。CacheResponse 代表从ResponseCache中检索资源的通道。ContentHandler 抽象类ContentHandler
是从URLConnection
读取Object
的所有类的超类。CookieHandler CookieHandler对象提供一个回调机制,将HTTP状态管理策略实现连接到HTTP协议处理程序中。CookieManager CookieManager提供了一个CookieHandler
的具体实现, 它将 cookie的存储与接受和拒绝Cookie的策略分开。DatagramPacket 该类表示数据报包。DatagramSocket 此类表示用于发送和接收数据报数据包的套接字。DatagramSocketImpl 抽象数据报和组播套接字实现基类。HttpCookie HttpCookie对象表示HTTP cookie,它承载服务器和用户代理之间的状态信息。HttpURLConnection 支持HTTP特定功能的URLConnection。IDN 提供在正常Unicode表示和ASCII兼容编码(ACE)表示之间转换国际化域名(IDN)的方法。Inet4Address 该类表示Internet协议版本4(IPv4)地址。Inet6Address 该类表示Internet协议版本6(IPv6)地址。InetAddress 此类表示Internet协议(IP)地址。InetSocketAddress 该类实现IP套接字地址(IP地址+端口号)它也可以是一对(主机名+端口号),在这种情况下将尝试解析主机名。InterfaceAddress 此类表示网络接口地址。JarURLConnection 与Java ARchive(JAR)文件或JAR文件中的条目的URL连接。MulticastSocket 组播数据报套接字类对发送和接收IP组播数据包很有用。NetPermission 此类用于各种网络权限。NetworkInterface 此类表示由名称组成的网络接口和分配给此接口的IP地址列表。PasswordAuthentication PasswordAuthentication类是Authenticator使用的数据持有者。Proxy 此类表示代理设置,通常是类型(http,socks)和套接字地址。ProxySelector 选择在连接到URL引用的网络资源时使用的代理服务器(如果有)。ResponseCache 表示URLConnection缓存的实现。SecureCacheResponse 表示最初通过安全手段(例如TLS)检索的缓存响应。ServerSocket 这个类实现了服务器套接字。Socket 该类实现客户端套接字(也称为“套接字”)。SocketAddress 这个类代表一个没有协议附件的Socket地址。SocketImpl 抽象类SocketImpl
是实际实现套接字的所有类的公共超类。SocketPermission 此类表示通过套接字访问网络。StandardSocketOptions 定义 标准套接字选项。URI 表示统一资源标识符(URI)参考。URL URL
类代表统一资源定位器,指向万维网上“资源”的指针。URLClassLoader 此类加载器用于从引用JAR文件和目录的URL的搜索路径加载类和资源。URLConnection 抽象类URLConnection
是表示应用程序和URL之间的通信链接的所有类的超类。URLDecoder HTML表单解码的实用类。URLEncoder HTML表单编码的实用类。URLPermission 表示访问由给定网址定义的资源或资源集的权限,以及给定的一组用户可设置的请求方法和请求标头。URLStreamHandler 抽象类URLStreamHandler
是所有流协议处理程序的通用超类。 -
枚举摘要 Enum 描述 Authenticator.RequestorType 请求认证的实体的类型。Proxy.Type 代表代理类型。StandardProtocolFamily 定义通信协议的标准系列。 -
异常摘要 异常 描述 BindException 指示尝试将套接字绑定到本地地址和端口时发生错误。ConnectException 指示尝试将套接字连接到远程地址和端口时发生错误。HttpRetryException 抛出表示HTTP请求需要重试,但由于启用了流式传输模式,因此无法自动重试。MalformedURLException 抛出以表示发生格式不正确的网址。NoRouteToHostException 指示尝试将套接字连接到远程地址和端口时发生错误。PortUnreachableException 指示在连接的数据报上收到了ICMP端口不可达消息。ProtocolException 抛出以表示底层协议有错误,如TCP错误。SocketException 抛出以表示创建或访问Socket时出错。SocketTimeoutException 指示在套接字上发生超时时读取或接受。UnknownHostException 抛出以表示无法确定主机的IP地址。UnknownServiceException 抛出以表示发生未知服务异常。URISyntaxException 检查的异常抛出以指示不能将字符串解析为URI引用。