HTMLpointHTMLpoint HTMLpoint.com


 El paquete java.net



El Paquete java.net

Java, como ya dijimos anteriormente, nació como lenguaje para la red y sólo sucesivamente se convirtió en un verdadero lenguaje de programación.
Su papel de líder para la programación no se pone en duda y, por eso, pone a disposición del programador diferentes paquetes para llevar a cabo esta programación.
Como el objetivo final del curso es programar Applet, tenemos que verlo aunque sea de modo superficial. El paquete es muy amplio y su contenido es el siguiente:

Interfaces
ContentHandlerFactory
FileNameMap
SocketImplFactory
SocketOptions
URLStreamHandlerFactory

Clases
Authenticator
ContentHandler
DatagramPacket
DatagramSocket
DatagramSocketImpl
HttpURLConnection
InetAddress
JarURLConnection
MulticastSocket
NetPermission
PasswordAuthentication
ServerSocket
Socket
SocketImpl
SocketPermission
URL
URLClassLoader
URLConnection
URLDecoder
URLEncoder
URLStreamHandler

Excepciones
BindException
ConnectException
MalformedURLException
NoRouteToHostException
ProtocolException
SocketException
UnknownHostException
UnknownServiceException

De todo esto nosotros veremos sólo algo. Para empezar vamos aver qué pasa en la red.
Los ordenadores en Internet comunican intercambiando paquetes de datos, llamados paquetes IP (Internet Protocol). Estos paquetes salen de un ordenador, pasan por varios nudos de la red (Servidor de la red) y llegan a su destino. Para establecer el recorrido intermedio entre los dos ordenadores que quieren comunicare se pone en marcha un algoritmo de routing (hay varios tipos según las exigencias y según el tipo de red).
Para establecer el remite de una comunicación, los destinatarios, los nudos internet, se necesita que cada ordenador conectado a la red tenga un nombre que lo identifique unívocamente. Este nombre es un número y se llama dirección IP.
La dirección IP es un número de 32 bit, que se puede escribir con varios formatos, sin embargo, el más utilizado es el formato decimal separado por puntos. Por ejemplo, una dirección IP es 594. 24.114.462 (Se ha elgido un número cualquiera).
Como los ordenadores recuerdan muy bien los números, pero nosotros los humanos no, se inventaron los DNS (Domain Name System) que asocian unos nombres a estas direcciones IP.
La primera clase del paquete que analizaremos es la InetAddres, que gestiona estas direcciones IP.
La clase tiene varios métodos, entre los que hay uno que devuelve las direcciones Ip del ordenador en el que se está trabajando, otro que, fijado un nombre de dominio, devuelve la dirección IP.
El siguiente ejemplo nos muestra el uso.

import java.net.*;
public class DireccionesIP
{
public static void main(String [] a)
{

String dom="developer.java.sun.com";

try {
InetAddress loc=InetAddress.getByName(dom);
System.out.println("IP de "+dom+" : "+loc.getHostAddress());
}
catch (UnknownHostException e)
{System.out.println("No existe el dominio "+dom);};


try {
InetAddress loc=InetAddress.getLocalHost();
System.out.println("IP local: "+loc.getHostAddress());
System.out.println("Nombre local"+loc.getHostName());
}
catch (UnknownHostException e)
{};

}

}

Como ejercicio, coged como nombre de dominio el primer tema del programa, por ejemplo,java DireccionesIP HTMLpoint

El paquete dota de clases útiles para tratar los socket fundamentales basados en TCP y en UDP, que son protocoles utilizados en la mayor parte de las aplicaciones Internet. Nosotros no los analizaremos, sino que pasaremos directamente a las clases que gestionan aplicaciones Web de nivel más alto.
Veamos la clase URL.
¿Qué es un URL? Un URL, o Uniform Resource Locator, es un puntero a un recurso web.
Un recurso web puede ser cualquier cosa, un directorio, un archivo, un objeto en red como, por ejemplo, una interfaz para hacer unas query a un database remoto, o para un motor de búsqueda.
Los URL son muchos, cada uno con un protocolo distinto, sin embargo los más utilizados son los que utilizan protocolos HTTP (HyperText Transfer Protocol) y FTP (File Transfer Protocol).
La clase URL se conecta con objetos web accediendo a éstos a través sus direcciones URL.
Vosotros que sois usuarios de HTMLpoint no necesitáis más explicaciones sobre el formato de las direcciones URL como http://www.cli.di.unipi.it/~castellu/index.html y que el index.html es opcional, es decir que la dirección URL http://www.cli.di.unipi.it/~castellu es igual a la anterior, que ~castellu es un directorio que se encuentra en el servidor, y que la dirección del servidor se identifica como http://www.cli.di.unipi.it . Sin embargo, os digo que, a diferencia de los web browser, l'http:// delante de la dirección es indispensable porque distingue el protocolo del URL, protocolo que el Navigator y el Explorer intuyen aunque se omitan. Cuando programemos los apliques utilizaremos sólo los URL para acceder también a los archivos locales, viéndolos como recursos de la red. Lo haremos porque en los apliques no se pueden utilizar los archivos, por razones de seguridad, entonces para leer un archivo hay que verlo como un recurso de la red.
Las últimas versiones de Java están eliminando esta limitación del lenguaje, utilizando unas firmas que permiten leer y escribir un archivo de forma controlada incluso en la red. Por eso en futuro será posible utilizar incluso los archivos en los archivos, siempre que se asuman algunas responsabilidades.
Veamos unos constructores de objetos URL:

URL(String spec) , crea un objeto URL según la representación a cadena, por ejemplo "HTMLpoint"
URL(String protocol, String host, int port, String file), crea un objeto URL, especificándolo todo, incluso la puerta.
URL(String protocol, String host, int port, String file, URLStreamHandler handler), como el anterior, lo único que especifica también la URLStreamHandler, que es la superclase común a todos los protocolos(HTTP,FTP,Gopher).
URL(String protocol, String host, String file), crea un objeto URL especificando el protocolo, el host y el Archivo en el servidor host, por ejemplo: URL("http","www.cli.di.unipi.it","~castellu/index.html").

Analizamos ahora unos métodos de la clase

boolean equals(Object obj), compara dos objetos URL.
Object getContent(), da el contenido del objeto URL.
String getFile(), da el nobre del archivo del URL.
String getHost(), el host
int getPort(), el número de la puerta
String getProtocol(), el nombre del protocolo.
String getRef(), da el puntero a la URL.
int hashCode(), da el código hash del objeto.
URLConnection openConnection(), abre una conexión con el objeto remoto indicado por la URL.
InputStream openStream(), abre una conexión con el objeto web indicado por la url en forma de flujo de lectura.
String toExternalForm(), da una cadena que representa la URL.
String toString(), da una representación del objeto URL.

A continuación damos un pequeño ejemplo de cómo se utiliza la clase URL.

import java.net.*;
import java.io.*;

public class getPage
{
public static void main(String[] arg)
{
String un;

try {un=arg[0];}
catch (ArrayIndexOutOfBoundsException e)
{
un="http://www.htmlpoint.com/index.asp";
System.out.println("Ninguna URL definida, cojo "+un);

};

System.out.println("URL:"+un);

URL url;

boolean tribilín=false;

try {url= new URL(un);}
catch (MalformedURLException e)
{
System.out.println("URL equivocado, cojo http://www.htmlpoint.com/index.asp ");

url = null;

tribilín=true;

};

if (tribilín) try {url = new URL ("http://www.htmlpoint.com/index.asp ");}
catch (MalformedURLException e){};

BufferedReader stream;
try {stream = new BufferedReader (new InputStreamReader (url.openStream()));}
catch (IOException e){
System.out.println("Error de apertura del archivo");
stream=null;
System.exit(0);
};

File out=new File(".\\"+url.getFile());

FileWriter Output;

try {Output=new FileWriter(out);}
catch (IOException e) {Output=null;};

String l;
try
{

while ((l=stream.readLine())!=null)
{


Output.write(l);

};

Output.flush();

Output.close();

}
catch (IOException e){System.out.println("Error de lectura.");};
}

}

El programa coge una url de los parámetros de entrada; si éste no es válido o no hay parámetros, abre por default la url http://HTMLpoint/index.asp. Entonces recoge la página que ha leído y la guarda en el disco.
Como se puede ver, esto se parece a un web browser, utilizando un poco de gráfica se podría visualizar incluso la página. Intentad poner en marcha el programa poniendo las siguientes direcciones:

java getPage http://www.cli.di.unipi.it/~castellu/index.htm
java getPage http://www.cli.di.unipi.it/~castellu/pietro1.htm
java getPage http://www.cli.di.unipi.it/~castellu/quiénsoy.htm


y simplemente java getPage, y veréis los resultados.


  Volver al inicio de la página