Package
java.net
Provides the classes for
implementing networking applications.
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
Addresses are used throughout the
java.net APIs as either host identifiers, or socket endpoint identifier.
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 needed functionalities.
About
IPv6
Not all systems do 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 java.net.InetAddress.getByName is 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
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 (java.net.Socket.connect(SocketAddress)) to a remote host.
- ServerSocket is a TCP server API, and will typically accept (java.net.ServerSocket.accept) connections from client
sockets.
- DatagramSocket is a UDP endpoint API and is used to send, and
receive, java.net.DatagramPackets.
- MulticastSocket is a subclass of the 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 java.net.Socket.getInputStream and java.net.Socket.getOutputStream methods.
Interfaces
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.
High
level API
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 mean 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.
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();
URL url = uri.toURL();
InputStream in = url.openStream();
Protocol
Handlers
As mentioned, URL and URLConnection
rely on protocol handlers which must be present, otherwise an Exception is
thrown. This is the major difference with URIs which only identify resources,
and therefore don't need to have access to the protocol handler. So, while it
is possible to create an URI with any kind of protocol scheme (e.g. 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 add
to the search path by setting the java.protocol.handler.pkgs system property. For instance if it is set to myapp.protocols, then the URL code will try, in the
case of http, first to load myapp.protocols.http.Handler, then, if this fails, http.Handler from the default location.






0 comments:
Post a Comment