# Java.net

Se refiere a la API o paquete de Java: java.net, el cual permite realizar conexiones y transacciones a través de la red. Utilizando el paquete java.net podemos comunicar dos o más computadoras que estén en distintas partes del mundo.

## Clases Principales de java.net
### Para la Identificación de Recursos tenemos
#### URI (Uniform Resource Identifier)

La clase URI se usa para encapsular un recurso, es decir, nos permite identificar un recurso. Su método más conocido es toURL que sirve para transformar una URI en URL, cabe resaltar que no toda URI es una URL, por lo que puede que el método nos devuelva una excepción del tipo URISyntaxException.

#### URL (Uniform Resource Locator)

La World Wide Web necesita obtener recursos para su funcionamiento, para esto utiliza URL (Localizador Uniforme de Recurso) Los URL proporcionan consistencia para codificar las localizaciones de los recursos de la red.
Uno de sus métodos principales es toURI, el cual sirve para convertir una URL en una URI.
Como ejemplos de URL tenemos:
* http://www.sun.com
* ftp://ftp.miempresa/downloads (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
* telnet://www.misite.pe/
En código Java:
dir=new URL("file://D:/archivo.txt")
Una vez que tenemos localizado el recurso, mediante los métodos OpenStream podemos acceder a la información que contiene.

#### URLConnection

La clase URL no crea una conexión real, la clase URLConnection crea un vínculo (petición/respuesta) entre el computador que esta ejecutando la aplicación y el computador que esta brindando el recurso.
Para utilizar URLConnection se usa el método openConnection de la clase URL

#### HttpURLConnection

Esta clase extiende de la clase URLConnection y da soporte específico al protocolo HTTP.

### Para el Direccionamiento tenemos
#### InetAddress

Esta clase nos permite encapsular una dirección IP numérica, para obtener un objeto de este tipo podemos utilizar los siguientes métodos:
* getLocalHost: Retorna un objeto de tipo InetAddress con los datos de direccionamiento locales.
* getByName(String nombre_host): Retorna un objeto de tipo InetAddress con los datos el direccionamiento según el nombre que le pasamos como parámetro. Puede retornar una Exception del tipo UnknownHostException si no puede resolver el nombre pasado como parámetro.
* getAllByName(String nombre_host): Retorna un array de objetos de tipo InetAddress con los datos del direccionamiento del nombre pasado como parámetro. Puede retornar una Exception del tipo UnknownHostException si no puede resolver el nombre pasado como parámetro.
Los siguientes son algunos de los métodos de la clase InetAddress:
* byte getAddress: Retorna la dirección IP
* String getHostAddress: Retorna La representación en texto de la IP
* String getHostName: Retorna la representación en texto del nombre de host.
* boolean isReachable(int tiempo): Retorna TRUE o FALSE si la dirección es alcanzable en el tiempo establecido como parámetro.

#### Inet4Address e Inet6Address

Estas clases son subclases de InetAddress y representan el estilo de direccionamiento IPv4 (32 bits) e IPv6 (128 bits) respectivamente.

### Para comunicaciones basadas en Sockets (Conexiones TCP)
#### Sockets de flujo

Con los sockets de flujo, un proceso mantiene una comunicación con otro proceso. El flujo que se establece entre estos dos procesos es continuo, este tipo de sockets proporcionan un servicio orientado a conexiones utilizando el protocolo TCP.

#### Sockets de datagramas

Se transmiten paquetes de información utilizando el protocolo UDP, por lo que significa que los paquetes no tienen que llegar ordenados.
* Datos: Q5641372