The java.net package can be roughly divided in two sections:
A Low Level API, which deals with the following abstractions:
Addresses, which are networking identifiers, like IP addresses.
Sockets, which are basic bidirectional data communication mechanisms.
Interfaces, which describe network interfaces.
A High Level API, which deals with the following abstractions:
URIs, which represent Universal Resource Identifiers.
URLs, which represent Universal Resource Locators.
Connections, which represents connections to the resource pointed to by URLs.
Addresses are used throughout the java.net APIs as either host identifiers, or socket endpoint identifiers.
The InetAddress
class is the abstraction representing an
IP (Internet Protocol) address. It has two subclasses:
Inet4Address
for IPv4 addresses.Inet6Address
for IPv6 addresses.But, in most cases, there is no need to deal directly with the subclasses, as the InetAddress abstraction should cover most of the needed functionality.
Not all systems have support for the IPv6 protocol, and while the Java
networking stack will attempt to detect it and use it transparently when
available, it is also possible to disable its use with a system property.
In the case where IPv6 is not available, or explicitly disabled,
Inet6Address are not valid arguments for most networking operations any
more. While methods like InetAddress.getByName(java.lang.String)
are
guaranteed not to return an Inet6Address when looking up host names, it
is possible, by passing literals, to create such an object. In which
case, most methods, when called with an Inet6Address will throw an
Exception.
Sockets are means to establish a communication link between machines over the network. The java.net package provides 4 kinds of Sockets:
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.Sending and receiving with TCP sockets is done through InputStreams and
OutputStreams which can be obtained via the
Socket.getInputStream()
and
Socket.getOutputStream()
methods.
The NetworkInterface
class provides APIs to browse and
query all the networking interfaces (e.g. ethernet connection or PPP
endpoint) of the local machine. It is through that class that you can
check if any of the local interfaces is configured to support IPv6.
Note, all conforming implementations must support at least one
NetworkInterface
object, which must either be connected to a
network, or be a "loopback" interface that can only communicate with
entities on the same machine.
A number of classes in the java.net package do provide for a much higher level of abstraction and allow for easy access to resources on the network. The classes are:
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 https.HttpURLConnection
is a subclass of URLConnection
and provides some additional functionalities specific to the
HTTP protocol. This API has been superceded by the newer
HTTP client API described in the previous section.The recommended usage is to use URI
to identify
resources, then convert it into a URL
when it is time to
access the resource. From that URL, you can either get the
URLConnection
for fine control, or get directly the
InputStream.
Here is an example:
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.
By default the protocol handlers are loaded dynamically from the default
location. It is, however, possible to deploy additional protocols handlers
as services
. Service providers of type
URLStreamHandlerProvider are located at
runtime, as specified in the URL constructor.
Class | Description |
---|---|
URLClassLoader |
REVISED This class loader is used to load classes and resources from a search
path of URLs referring to both JAR files and directories.
|
Copyright © 1993, 2017, Oracle and/or its affiliates · All rights reserved · License