jdk/src/share/classes/java/net/package.html
author alanb
Fri, 02 Nov 2012 15:50:11 +0000
changeset 14342 8435a30053c1
parent 14197 1b78ddd3644e
permissions -rw-r--r--
7197491: update copyright year to match last edit in jdk8 jdk repository Reviewed-by: chegar, ksrini
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
<!--
14342
8435a30053c1 7197491: update copyright year to match last edit in jdk8 jdk repository
alanb
parents: 14197
diff changeset
     2
 Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     7
 published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     9
 by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    21
 Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    22
 or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    23
 questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
-->
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
<html>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
<body bgcolor="white">
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
Provides the classes for implementing networking applications.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
<p> The java.net package can be roughly divided in two sections:</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
<ul>
8562
72c0c44969c1 7018137: HTML4 compliance issues
chegar
parents: 5506
diff changeset
    34
    <li> <p><i>A Low Level API</i>, which deals with the following abstractions:</p>
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
    <ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
      <li><p><i>Addresses</i>, which are networking identifiers, like IP addresses.</p></li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
      <li><p><i>Sockets</i>, which are basic bidirectional data communication mechanisms.</p></li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
      <li><p><i>Interfaces</i>, which describe network interfaces. </p></li>
8562
72c0c44969c1 7018137: HTML4 compliance issues
chegar
parents: 5506
diff changeset
    39
    </ul></li>
72c0c44969c1 7018137: HTML4 compliance issues
chegar
parents: 5506
diff changeset
    40
    <li> <p><i>A High Level API</i>, which deals with the following abstractions:</p>
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
    <ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
      <li><p><i>URIs</i>, which represent Universal Resource Identifiers.</p></li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
      <li><p><i>URLs</i>, which represent Universal Resource Locators.</p></li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
      <li><p><i>Connections</i>, which represents connections to the resource pointed to by <i>URLs</i>.</p></li>
8562
72c0c44969c1 7018137: HTML4 compliance issues
chegar
parents: 5506
diff changeset
    45
      </ul></li>
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
<h2>Addresses</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
<p>Addresses are used throughout the java.net APIs as either host identifiers, or socket endpoint identifiers.</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
<p>The {@link java.net.InetAddress} class is the abstraction representing an IP (Internet Protocol) address.  It has two subclasses:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    50
<ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
      <li>{@link java.net.Inet4Address} for IPv4 addresses.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
      <li>{@link java.net.Inet6Address} for IPv6 addresses.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
<p>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.</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
<h3><b>About IPv6</b></h3>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
<p>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 {@link java.net.InetAddress#getByName} 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.</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
<h2>Sockets</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
<p>Sockets are means to establish a communication link between machines over the network. The java.net package provides 4 kinds of Sockets:</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
<ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
      <li>{@link java.net.Socket} is a TCP client API, and will typically be used to {@linkplain java.net.Socket#connect(SocketAddress) connect} to a remote host.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
      <li>{@link java.net.ServerSocket} is a TCP server API, and will typically {@linkplain java.net.ServerSocket#accept accept} connections from client sockets.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
      <li>{@link java.net.DatagramSocket} is a UDP endpoint API and is used to {@linkplain java.net.DatagramSocket#send send} and {@linkplain java.net.DatagramSocket#receive receive} {@linkplain java.net.DatagramPacket datagram packets}.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
      <li>{@link java.net.MulticastSocket} is a subclass of {@code DatagramSocket} used when dealing with multicast groups.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
<p>Sending and receiving with TCP sockets is done through InputStreams and OutputStreams which can be obtained via the {@link java.net.Socket#getInputStream} and {@link java.net.Socket#getOutputStream} methods.</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
<h2>Interfaces</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
<p>The {@link java.net.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.</p>
13374
2a3bf352ef97 7120665: Change Java SE spec so that external networking not required
michaelm
parents: 9035
diff changeset
    68
<p>Note, all conforming implementations must support at least one {@code 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.</p>
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
<h2>High level API</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    71
<p>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:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    72
<ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
      <li>{@link 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.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
      <li>{@link java.net.URL} is the class representing a Universal Resource Locator, which is both an older concept for URIs and a means to access the resources.</li>
14197
1b78ddd3644e 8000941: Remove ftp from the required list of protocol handlers
alanb
parents: 13374
diff changeset
    75
      <li>{@link java.net.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.</li>
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
      <li>{@link java.net.HttpURLConnection} is a subclass of URLConnection and provides some additional functionalities specific to the HTTP protocol.</li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
<p>The recommended usage is to use {@link java.net.URI} to identify resources, then convert it into a {@link java.net.URL} when it is time to access the resource. From that URL, you can either get the {@link java.net.URLConnection} for fine control, or get directly the InputStream.<p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
<p>Here is an example:</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
<p><code>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
URI uri = new URI("http://java.sun.com/");<br>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
URL url = uri.toURL();<br>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
InputStream in = url.openStream();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
</code></p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
<h2>Protocol Handlers</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
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. <code>myproto://myhost.mydomain/resource/</code>), a similar URL will try to instantiate the handler for the specified protocol; if it doesn't exist an exception will be thrown.</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
<p>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 <code>java.protocol.handler.pkgs</code> system property. For instance if it is set to <code>myapp.protocols</code>, then the URL code will try, in the case of http, first to load <code>myapp.protocols.http.Handler</code>, then, if this fails, <code>http.Handler</code> from the default location.<p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
<p>Note that the Handler class <b>has to</b> be a subclass of the abstract class {@link java.net.URLStreamHandler}.</p>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
<h2>Additional Specification</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
<ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
      <li><a href="doc-files/net-properties.html">Networking System Properties</a></li>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
<!--
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
<h2>Package Specification</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
<ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    98
  <li><a href="">##### REFER TO ANY FRAMEMAKER SPECIFICATION HERE #####</a>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    99
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
90ce3da70b43 Initial load
duke
parents:
diff changeset
   101
<h2>Related Documentation</h2>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
For overviews, tutorials, examples, guides, and tool documentation, please see:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
<ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
  <li><a href="">##### REFER TO NON-SPEC DOCUMENTATION HERE #####</a>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
</ul>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
-->
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
@since JDK1.0
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
</body>
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
</html>