java.net包可以大致分为两部分:
低级API ,处理以下抽象:
地址 ,即网络标识符,如IP地址。
套接字 ,这是基本的双向数据通信机制。
接口方面,它描述网络接口。
高级API ,处理以下抽象:
代表通用资源标识符的 URI 。
代表通用资源定位器的 URL 。
连接 ,代表与 URL指向的资源的连接。
地址在整个java.net API中用作主机标识符或套接字端点标识符。
InetAddress
类是表示IP(Internet协议)地址的抽象。 它有两个子类:
Inet4Address
for IPv4 addresses.Inet6Address
for IPv6 addresses.但是,在大多数情况下,不需要直接处理子类,因为InetAddress抽象应该覆盖大部分所需的功能。
并非所有系统都支持IPv6协议,并且Java网络堆栈将尝试检测并在可用时透明地使用它,但也可以通过系统属性禁用它。 在IPv6不可用或禁用的情况下,对于大多数网络操作,Inet6Address不再是有效的参数。 尽管像getByName(String)
这样的方法可以保证在查找主机名时不返回Inet6Address,但通过传递文字可以创建这样一个对象。 在这种情况下,大多数方法在用Inet6Address调用时都会抛出异常。
套接字是通过网络在机器之间建立通信链接的手段。 java.net包提供了4种套接字:
Socket
is a TCP client API, and will typically be used to connect to a remote host.ServerSocket
is a TCP server API, and will typically accept connections from client sockets.DatagramSocket
is a UDP endpoint API and is used to send and receive datagram packets.MulticastSocket
is a subclass of DatagramSocket
used when dealing with multicast groups.使用TCP套接字发送和接收是通过InputStreams和OutputStreams完成的,可以通过 getInputStream()
和 getOutputStream()
方法获取。
NetworkInterface
类提供了API来浏览和查询本地机器的所有网络接口(例如以太网连接或PPP端点)。 正是通过该类,您可以检查是否有任何本地接口配置为支持IPv6。
java.net包中的许多类都提供了更高级别的抽象,并允许轻松访问网络上的资源。 这些课程是:
URI
is the class representing a Universal Resource Identifier, as specified in RFC 2396. As the name indicates, this is just an Identifier and doesn't provide directly the means to access the resource.URL
is the class representing a Universal Resource Locator, which is both an older concept for URIs and a means to access the resources.URLConnection
is created from a URL and is the communication link used to access the resource pointed by the URL. This abstract class will delegate most of the work to the underlying protocol handlers like http or ftp.HttpURLConnection
is a subclass of URLConnection and provides some additional functionalities specific to the HTTP protocol.建议的用法是使用URI
来标识资源,然后在需要访问资源时将其转换为URL
。 从该URL中,您可以获得URLConnection
进行精细控制,或者直接获取InputStream。
这里是一个例子:
URI uri = new URI("http://java.sun.com/");
URL url = uri.toURL();
InputStream in = url.openStream();
myproto://myhost.mydomain/resource/
), a similar URL will try to instantiate the handler for the specified protocol; if it doesn't exist an exception will be thrown.
默认情况下,协议处理程序从默认位置动态加载。 但是,可以通过设置java.protocol.handler.pkgs
系统属性添加到搜索路径。 例如,如果设置为myapp.protocols
,那么在http的情况下,URL代码将首先尝试加载myapp.protocols.http.Handler
,如果失败, http.Handler
默认位置http.Handler
。
请注意,Handler类 必须是抽象类 URLStreamHandler
的子类。
ContentHandlerFactory | 该接口为内容处理程序定义了一个工厂。 |
CookiePolicy | CookiePolicy实现决定哪些cookie应该被接受,哪些应该被拒绝。 |
CookieStore | CookieStore对象表示cookie的存储。 |
DatagramSocketImplFactory | 该接口为数据报套接字实现定义了一个工厂。 |
FileNameMap | 一个简单的接口,它提供了一种在文件名和MIME类型字符串之间进行映射的机制。 |
ProtocolFamily | 代表一组通信协议。 |
SocketImplFactory | 该接口为套接字实现定义了一个工厂。 |
SocketOption<T> | 与套接字关联的套接字选项。 |
SocketOptions | 获取/设置套接字选项的方法的接口。 |
URLStreamHandlerFactory | 该接口为 URL 流协议处理程序定义了一个工厂。 |
Authenticator | 类Authenticator表示知道如何获取网络连接的身份验证的对象。 |
CacheRequest | 表示用于在ResponseCache中存储资源的通道。 |
CacheResponse | 表示从ResponseCache中检索资源的通道。 |
ContentHandler | 抽象类 ContentHandler 是从 URLConnection 中读取 Object 的所有类的超类。 |
CookieHandler | CookieHandler对象提供回调机制,将HTTP状态管理策略实现挂接到HTTP协议处理程序中。 |
CookieManager | CookieManager提供了CookieHandler的具体实现, 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归档(JAR)文件的URL连接或JAR文件中的条目。 |
MulticastSocket | 多播数据报套接字类对发送和接收IP多播包很有用。 |
NetPermission | 旧版安全代码; 不使用。 |
NetworkInterface | 该类表示一个网络接口,由一个名称和一个分配给该接口的IP地址列表组成。 |
PasswordAuthentication | PasswordAuthentication类是Authenticator使用的数据持有者。 |
Proxy | 这个类表示一个代理设置,通常是一个类型(http,socks)和一个套接字地址。 |
ProxySelector | 选择连接到URL引用的网络资源时使用的代理服务器(如果有)。 |
ResponseCache | 代表URLConnection缓存的实现。 |
SecureCacheResponse | 表示最初通过安全手段(如TLS)检索到的缓存响应。 |
ServerSocket | 这个类实现服务器套接字。 |
Socket | 这个类实现客户端套接字(也称为“套接字”)。 |
SocketAddress | 这个类表示一个没有协议附件的套接字地址。 |
SocketImpl | 抽象类 SocketImpl 是实际实现套接字的所有类的常见超类。 |
SocketPermission | 旧版安全代码; 不使用。 |
StandardSocketOptions | 定义 标准套接字选项。 |
URI | 表示统一资源标识符(URI)参考。 |
URL | 类 URL 表示统一资源定位符,指向万维网上“资源”的指针。 |
URLClassLoader | 这个类加载器用于从指向JAR文件和目录的URL的搜索路径加载类和资源。 |
URLConnection | 抽象类 URLConnection 是表示应用程序和URL之间的通信链接的所有类的超类。 |
URLDecoder | HTML表单解码的实用工具类。 |
URLEncoder | HTML表单编码的实用工具类。 |
URLStreamHandler | 抽象类 URLStreamHandler 是所有流协议处理程序的公共超类。 |
Authenticator.RequestorType | 请求认证的实体的类型。 |
Proxy.Type | 代表代理类型。 |
StandardProtocolFamily | 定义通信协议的标准系列。 |
BindException | 表示尝试将套接字绑定到本地地址和端口时发生错误。 |
ConnectException | 表示尝试将套接字连接到远程地址和端口时发生错误。 |
HttpRetryException | 抛出以表示HTTP请求需要重试,但由于启用了流式传输模式,因此无法自动重试。 |
MalformedURLException | 抛出以表明发生了格式错误的URL。 |
NoRouteToHostException | 表示尝试将套接字连接到远程地址和端口时发生错误。 |
PortUnreachableException | 表示在连接的数据报上收到ICMP端口不可达消息。 |
ProtocolException | 抛出以表明底层协议中存在错误,例如TCP错误。 |
SocketException | 抛出以指示创建或访问套接字时发生错误。 |
SocketTimeoutException | 表示套接字读取或接受发生超时。 |
UnknownHostException | 抛出以表明无法确定主机的IP地址。 |
UnknownServiceException | 抛出以表明发生了未知的服务异常。 |
URISyntaxException | 检查的异常抛出,表明一个字符串不能被解析为一个URI引用。 |