Programación para redes con Java

Texto completo

(1)

Programación para redes

con Java

Jorge Eduardo Ibarra Esquer

Programación para redes

Clases en java.net Protocolos

Sockets Datagramas

(2)

Programación para redes

Java presenta de forma estándar

para todas las plataformas y

sistemas operativos, un conjunto de clases que permiten la comunicación entre aplicaciones que se ejecutan en distintas computadoras.

Programación para redes

El paquete java.net del API de Java incluye las clases necesarias para

establecer conexiones, crear servidores, enviar y recibir datos, y para el resto de operaciones utilizadas en las

comunicaciones a través de redes de computadoras.

(3)

Fundamentos de TCP/IP

El Protocolo de Control de Transmisión y Protocolo de Internet (TCP/IP) se define como un grupo de protocolos que permite que dos aplicaciones en dos nodos de una red se comuniquen y compartan

información.

Fundamentos de TCP/IP

TCP/IP se organiza como capas de subprotocolos, cada uno con sus

(4)

Las capas de TCP/IP

Aplicación: Se compone de protocolos para aplicaciones específicas Transporte: Proporciona un medio de transmisión a la aplicación

Red: Lleva los paquetes a través de la red (IP)

Enlace: Controladores y hardware Aplicación Transporte Red Enlace

Protocolos (Transporte)

TCP: Es la parte del grupo que hace confiable a IP. Garantiza que los datos lleguen a su destino y se reciban

correctamente. Orientado a conexión. UDP: Actúa como un medio de

(5)

Protocolos (Red)

IP: Es responsable del movimiento de los datagramas entre dos puntos.

ICMP (Internet Control Message

Protocol): Maneja mensajes internos de control y error entre ruteadores y

computadoras.

IGMP (Internet Group Management Protocol)

Protocolos (Enlace)

ARP (Address Resolution Protocol): Convierte direcciones IP a direcciones de hardware.

(6)

Protocolos (Aplicación)

HTTP (Protocolo de Transferencia de Hipertexto).

IIOB (Internet Inter-ORB Protocol): Comunicación entre objetos en la red. RMI (Remote Method Invocation) FTP (Protocolo de Transferencia de Archivos)

El paquete java.net

El paquete java.net del API de Java incluye las clases necesarias para establecer conexiones, crear

servidores, enviar y recibir datos, y para el resto de operaciones

(7)
(8)

URL

URL es un acrónimo que viene de

Uniform Resource Locator y es

(9)

URL

http://www.uabc.mx:80/documentos/index.html

Protocolo Host Puerto Ruta al archivo

Recurso

Clase java.net.URL

Constructor Summary

URL(Stringspec)

Creates a URLobject from the Stringrepresentation.

URL(Stringprotocol, Stringhost, int port, Stringfile)

Creates a URLobject from the specified protocol, host, portnumber, and file.

URL(Stringprotocol, Stringhost, int port, Stringfile, URLStreamHandlerhandler)

Creates a URLobject from the specified protocol, host, portnumber, file, and

handler.

URL(Stringprotocol, Stringhost, Stringfile)

Creates a URL from the specified protocolname, hostname, and filename.

URL(URLcontext, Stringspec)

Creates a URL by parsing the given spec within a specified context.

URL(URLcontext, Stringspec, URLStreamHandlerhandler)

(10)

Crear una URL

Escribir un programa en Java que reciba una URL desde la línea de

comando y cree un objeto del tipo URL

Crear una URL relativa

Escribir un programa en Java que reciba una URL desde la línea de comando y varios

(11)

MalformedURLException

Cada uno de los constructores de URL lanza una MalformedURLException si los argumentos del constructor son nulos o el protocolo es desconocido. Típicamente, se querrá capturar y manejar esta excepción.

MalformedURLException

Normalmente se deberá introducir el constructor de URL en un par try/catch.

try {

URL myURL = new URL(. . .) }

catch (MalformedURLException e) {

. . . // Aquí va el código del manejador de excepciones . . .

(12)

Capturar Excepciones al crear

una URL

Agregar a los programas anteriores la captura y manejo de excepciones que sean necesarias.

Nota:

(13)

Analizar una URL

La clase URL proporciona varios métodos que permiten preguntar a los objetos URL. Puede obtener el protocolo, nombre de host, número de puerto, y nombre de archivo de una URL utilizando estos métodos accesorios.

Analizar una URL

getProtocol() Devuelve el identificador

de protocolo de la URL.

getHost() Devuelve el nombre del host

de la URL.

getPort() Devuelve el número del puerto

de la URL.

getFile() Devuelve el nombre de archivo

de la URL.

(14)

Analizar una URL

Escribir un programa que cree una URL a partir de un argumento de la línea de comando y obtenga cada uno de sus componentes.

Leer desde una URL

Después de haber creado satisfactoriamente una URL, se puede llamar al método

openStream() de la clase URL para

obtener un canal desde el que poder leer el contenido de la URL. El método regresa un

objeto java.io.InputStream por lo que se

(15)

Leer desde una URL

BufferedReader buf=new BufferedReader(new

InputStreamReader(unaURL.openStream( )));

String inputLine;

while ((inputLine = buf.readLine()) != null)

{

System.out.println(inputLine); }

buf.close();

Leer desde una URL

(16)

Conectar con una URL

Si se ha creado satisfactoriamente una URL, se puede llamar al método

openConnection() de la clase URL

para conectar con ella. Al conectarse con una URL se habrá inicializado un enlace de comunicación entre un programa Java y la URL a través de la red.

Conectar con una URL

try {

URL yahoo = new URL("http://www.yahoo.com/"); URLConnection

yahooCon=yahoo.openConnection(); }

(17)

Conectar con una URL

Si es posible, el método openConnection() crea un nuevo objeto URLConnection, lo inicializa, conecta con la URL y devuelve el objeto URLConnection. Si algo va mal -- por ejemplo, el servidor de Yahoo está apagado -- el método openConnection() lanza una IOException.

La clase URLConnection

Esta clase es la superclase de todas las clases que representan un enlace de

comunicaciones entre una aplicación y un URL.

Las instancias de esta clase pueden utilizarse tanto para leer como para

(18)

La clase URLConnection

Los métodos de URLConnection también pueden utilizarse para inspeccionar las propiedades del objeto remoto antes de transportarlo al entorno local.

La clase URLConnection

Algunas de esas propiedades las podemos obtener con estos métodos:

getContentEncoding getContentLength getContentType getDate

(19)

Leer desde un URL con

URLConnection

Para leer datos desde una conexión a un URL, debemos obtener una referencia al flujo de entrada:

URLConnection conexion = url.openConnection(); BufferedReader dis = new BufferedReader(new

InputStreamReader(conexion.getInputStream()));

Leer desde una URL con

URLConnection

Escribir un programa que se conecte a una URL, obtenga sus propiedades, lea su contenido y lo muestre en la

(20)

Escribir a un URL

Muchas páginas HTML contienen formas que permiten introducir datos en el servidor. Después de teclear la

información requerida e iniciar la petición pulsando un botón, el navegador que se utiliza escribe los datos en la URL a través de la red. Después, la otra parte de la conexión los procesa, y envía de vuelta una respuesta, normalmente en la forma de una nueva página HTML.

Escribir a un URL

Los programas Java también pueden interactuar con los scripts del lado del servidor. Sólo deben poder

(21)

Escribir a un URL

Crear un URL

Abrir una conexión con el URL Obtener el flujo de salida sobre la conexión. Este canal de salida está conectado al canal de entrada estándar del script

Escribir en el flujo de salida Cerrar el flujo de salida

Escribir a un URL

Para obtener el flujo de salida, hacemos lo siguiente:

conexion.setDoOutput(true); PrintStream outStream = new

PrintStream(conexion.getOutputStream()); outStream.println(“Cadena codificada”);

(22)

Escribir a un URL

Los datos que se envíen al URL deben estar codificados. Por ejemplo, la cadena “Dos palabras” se codificará como “Dos+Palabras” Para codificar una cadena, utilizamos el método

encode de la clase URLEncoder

String cadenaEnc=URLEncoder.encode(cadena,”UTF-8”);

Escribir a un URL

(23)

Escribir a un URL

Escribir un programa que envíe datos a un script en un servidor web y que

muestre la respuesta del servidor en la pantalla

http://yaqui.mxl.uabc.mx/~jorgeeie/practicas/script.php? nombre=Jorge+Ibarra&email=jorgeeie%40uabc.mx

La clase HttpURLConnection

Esta clase extiende a la clase

(24)

La clase HttpURLConnection

Métodos:

setRequestMethod(String method); El método puede ser alguno de:

GET, POST, PUT, OPTIONS, DELETE, HEAD o TRACE

La clase HttpURLConnection

Métodos:

int getResponseCode();

(25)

La clase HttpURLConnection

Para crear una instancia de esta clase, hacemos lo siguiente:

HttpURLConnection conexion;

conexion= (HttpURLConnection)url.openConnection();

Escribir a un URL con

HttpURLConnection

Escribir un programa que envíe datos a un script en un servidor web y que cree un objeto a partir de la respuesta del servidor.

http://yaqui.mxl.uabc.mx/~jorgeeie/practicas/persona.php? nombre=Jorge+Ibarra&email=jorgeeie%40uabc.mx&edad=27

(26)

Sockets

Las URLs y URLConnections se utilizan para comunicarse a través de la red a un nivel relativamente alto y para un propósito

específico: acceder a los recursos de Internet. Algunas veces los programas requieren una comunicación en la red a un nivel más bajo, por ejemplo, cuando se quiera escribir una

aplicación cliente-servidor.

Sockets

En aplicaciones cliente-servidor, el

servidor proporciona algún servicio, como procesar consultas a bases de datos. El cliente utiliza el servicio proporcionado por el servidor para algún fin.

(27)

Sockets

Un socket es un punto final en un enlace de comunicación de dos vías entre dos programas que se

ejecutan en la red.

Las clases Socket son utilizadas para representar conexiones entre un programa cliente y otro

programa servidor.

Sockets

(28)

Sockets

Si se está programando un cliente, se puede abrir un Socket de la

siguiente forma:

Socket socketCliente;

socketCliente = new Socket("máquina", puerto);

Nota: Esto puede arrojar una IOException

Sockets

Para leer datos a través del socket, obtenemos el flujo de entrada:

BufferedReader in=new BufferedReader(new

(29)

Sockets

Para escribir datos a través del

socket, obtenemos el flujo de salida:

PrintStream out = new

PrintStream(socket.getOutputStream()); out.print(cadena);

import java.io.*; import java.net.*; public class SocketWhois {

public static void main(String[] args) throws Exception {

String cadena;

Socket s=new Socket("internic.net",43); BufferedReader in=new BufferedReader(new

(30)

Sockets

Si se está programando un servidor, se puede abrir un Socket de la

siguiente forma:

ServerSocket socketServidor;

socketServidor = new ServerSocket(puerto);

Nota: Esto puede arrojar una IOException

Sockets

También es necesario crear un Socket para las conexiones de los clientes:

Socket socketCliente = null; try {

(31)

Sockets

Para leer datos a través del socket, o escribir en él, se obtienen los flujos de entrada y salida para el socket del cliente.

Sockets

Para escribir datos a través del

socket, obtenemos el flujo de salida:

PrintStream out = new

(32)

Socket en el servidor

Escribir un programa que funcione

como un servidor de

echo.

ServerSocket echoServer = null; Socket clientSocket = null;

echoServer = new ServerSocket(9999); clientSocket=echoServer.accept();

Sockets

El ejemplo anterior solo puede aceptar a un cliente. Para aceptar varias conexiones, se debe iniciar un hilo (Thread) en el servidor para

(33)

Socket en el servidor

Escribir un programa que funcione

como un servidor de

echo

y que

acepte conexiones de múltiples

clientes

Socket en el servidor

Escribir un programa que funcione

como un servidor

http

y que acepte

conexiones de múltiples clientes. El

servidor solamente aceptará

solicitudes de la forma

(34)

Datagramas

No todas las aplicaciones que se escriban para comunicarse sobre una red requieren el canal confiable proporcionado por TCP. De hecho, esas aplicaciones podrían

beneficiarse de un modo de comunicación que entregue paquetes de información independientes sin tener garantizada su llegada ni el orden en que lleguen.

Datagramas

El protocolo UDP proporciona un medio de comunicación en red donde las

(35)

Datagramas

Un datagrama es un mensaje

independiente enviado a través de la red y del cual no se garantizan su llegada,

tiempo de llegada ni contenido.

Datagramas

El paquete java.net contiene dos clases que permiten escribir programas que utilicen datagramas:

DatagramPacket DatagramSocket

además de la clase MulticastSocket, que permite enviar un paquete a varios

(36)

Cliente y servidor de

datagramas

Escribir un cliente y un servidor de

datagramas. El servidor enviará

Figure

Actualización...

Referencias

Actualización...

Related subjects :