Programación para redes con Java



Documentos relacionados
Lab 01: Programación de Sockets en TCP

1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

Federico Peinado

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

ARQUITECTURAS CLIENTE/SERVIDOR

Modelo de Objetos Distribuidos

Sockets. Introducción. Las redes de computadoras permiten al usuario. Curso Propedéutico Maestría en Ciencias de la Computación BUAP

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

Examen de Redes - ETSIA 9 de septiembre - Primer Parcial

Arquitecturas cliente/servidor

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

Clases Java para comunicaciones en red

Cátedra de Sistemas Distribuidos Escuela de Ingeniería Electrónica Departamento de Sistemas e Informática

Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.

Las clases Java Socket y ServerSocket

Tutorial BMS Server Studio UDP

Unidad I: La capa de Red

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

Introducción a las Redes de Computadoras. Obligatorio

Manual del Protocolo XML-RPC de Mensajería Negocios

CLASE SOCKET. 1. Crear un nuevo socket usando un constructor de la clase. 2. El socket trata de conectarse al host remoto.

Práctica 2: Java Remote Method Invocation (RMI)

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

URLs en Java. Contenido. La clase URL Acceso al contenido de una URL La clase URLEncoder La clase URLConnection

HTTP Introducción. Redes de Datos Ing. Marcelo Utard / Ing. Pablo Ronco FACULTAD DE INGENIERIA UNIVERSIDAD DE BUENOS AIRES

Arquitecturas cliente/servidor

Programación Android. Rafael Morón Abad

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

Aspectos Básicos de Networking

TEMA: PROTOCOLOS TCP/IP

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

La vida en un mundo centrado en la red

Comunicacion en Java. Alejandro Escobar

INTRODUCCIÓN. El protocolo TCP, funciona en el nivel de transporte del modelo de referencia OSI, proporcionando un transporte fiable de datos.

LA ARQUITECTURA TCP/IP

QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)

CONFIGURACIÓN BÁSICA DE UNA VPN EN WINDOWS XP PROFESIONAL

DIPLOMADO EN SEGURIDAD INFORMATICA

Práctica 5: Servidor web concurrente en Java

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

INSTITUTO TECNOLÓGICO DE SALINA CRUZ. Fundamentos De Redes. Semestre Agosto-Diciembre Reporte De Lectura


TECNOLOGÍAS ASOCIADAS A LAS APLICACIONES WEB

Práctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark

Comunicación entre Procesos y Sockets

CAPITULO 2 COMUNICACION ATRAVES DE LA RED

GUÍA Nro. 1 TECNOLOGÍA DE INTERNET. TIII PIII

Práctica 4: Java Remote Method Invocation (RMI)

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Reflexión. Inicio. Contenido

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

1. Visión general de RMI

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

Cliente/Servidor en Java

Manual de uso para la aplicación cliente para uso de FTP, FTPS y SFTP Configuración de Filezilla *

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

Examen de Redes - Primer Parcial - ETSIA 26 de Enero de 2006

Universidad de Cantabria

Host. En este texto, entenderemos por host toda máquina - léase computadora. Cuenta. Una cuenta, en general, es un espacio de memoria y de disco que

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

TEMA 4: EMPEZANDO A NAVEGAR ESCUELA UNIVERSITARIA DE INFORMÁTICA. Raúl Martín Martín

Tema 4: Tecnologías Web Java

Telnet Comunicaciones 1. Luis Alfredo da Silva Gregori Gonzalez Rhamin Elrhouate July 2014

API de java. ( Guía de alumno Laboratorio 9. Recursos disponibles en moodle para este día.

EXTENSIÓN DE UML PARA APLICACIONES WEB

Instalación, creación y configuración del servicio FTP

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

Sockets. Sockets. 1 Introducción

%& %)& '$!%*+ $, %%%&$ %%

Programación Orientada a Objetos con Java

Remote Method Invocation (RMI) de Java

CONFIGURACIÓN DEL ADAPTADOR DE RED EN LINUX

Servidor FTP. Ing. Camilo Zapata Universidad de Antioquia

Introducción a las Redes de Computadoras

I. Verdadero o Falso (16 puntos)

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

Crear un servidor Web en IIS

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE

3.1 Introducción a Wireshark

RMI [Remote Method Invocation]

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

Ejemplos básicos de webmathematica para profesores

Internet Information Server

Ingeniería del Software Arquitectura Física en 3 niveles

ENVÍO DE POR MEDIO DE SMTP

Transcripción:

Programación para redes con Java Jorge Eduardo Ibarra Esquer Programación para redes Clases en java.net Protocolos Sockets Datagramas Aplicaciones cliente-servidor 1

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. Servlets RMI Java IDL. 2

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 funciones específicas que en conjunto proporcionan la funcionalidad apropiada para lograr la comunicación de datos. 3

Las capas de TCP/IP Aplicación Transporte Red Enlace 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 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 broadcasting. Envía paquetes de datos (datagramas) de una aplicación a otra. 4

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. RARP (Reverse ARP) 5

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 utilizadas en las comunicaciones a través de redes de computadoras. 6

Cuando se escriben programas Java que se comunican a través de la red, se está programando en la capa de aplicación. Para la elaboración de dichos programas, se pueden utilizar las clases del paquete java.net 7

URL URL es un acrónimo que viene de Uniform Resource Locator y es una referencia (una dirección) a un recurso de Internet. 8

URL http://www.uabc.mx:80/documentos/index.html Protocolo Host Puerto Ruta al archivo Recurso Clase java.net.url Constructor Summary URL(String spec) Creates a URL object from the String representation. URL(String protocol, String host, int port, String file) Creates a URL object from the specified protocol, host, port number, and file. URL(String protocol, String host, int port, String file, URLStreamHandler handler) Creates a URL object from the specified protocol, host, port number, file, and handler. URL(String protocol, String host, String file) Creates a URL from the specified protocol name, host name, and file name. URL(URL context, String spec) Creates a URL by parsing the given spec within a specified context. URL(URL context, String spec, URLStreamHandler handler) Creates a URL by parsing the given spec with the specified handler within a specified context. 9

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 archivos. Cree un objeto del tipo URL y a partir de éste, uno por cada uno de los archivos proporcionados. 10

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... } 11

Capturar Excepciones al crear una URL Agregar a los programas anteriores la captura y manejo de excepciones que sean necesarias. Nota: Las URLs son objetos de "una sóla escritura". Una vez que se ha creado un objeto URL no se puede cambiar ninguno de sus atributos (protocolo, nombre del host, nombre del archivo ni número de puerto). 12

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. getref() Obtiene la referencia de la URL. 13

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 puede leer normalmente de la URL utilizando los métodos normales de InputStream. 14

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 Escribir un programa que cree una URL, lea un archivo HTML y lo muestre en la pantalla. 15

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(); } catch (MalformedURLException e) { // nueva URL() fallida...} catch (IOException e) { // openconnection() fallida...} 16

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 escribir al recurso referenciado por la URL 17

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 getexpiration getlastmodifed 18

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 pantalla. 19

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 escribir a una URL, así proporcionan los datos al servirdor. Un programa puede hacer esto siguiendo los siguientes pasos: 20

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 ); outstream.close(); 21

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 Los datos se envían como pares variable=valor de la siguiente forma:?var1=valor1&var2=valor2& 22

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 URLConnection, a la vez que agrega atributos y métodos adecuados para trabajar con el protocolo HTTP 23

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(); El código de respuesta del servidor puede ser, entre otros: HTTP_OK HTTP_NOT_FOUND HTTP_FORBIDDEN 24

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 &estatura=1.70 25

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. La comunicación que ocurre entre el cliente y el servidor debe ser fiable -- los datos no pueden perderse y deben llegar al cliente en el mismo orden en el que fueron enviados. 26

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 El paquete java.net proporciona dos clases -- Socket y ServerSocket -- que implementan los lados del cliente y del servidor de una conexión, respectivamente. 27

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 InputStreamReader(socket.getInputStream())); while((cadena=in.readline())!=null) System.out.println(cadena); 28

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 InputStreamReader(s.getInputStream())); PrintStream out = new PrintStream(s.getOutputStream()); String str=(args.length==0?"osborne.com":args[0])+"\n"; out.print(str); } } while((cadena=in.readline())!=null) System.out.println(cadena); 29

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 { socketcliente = socketservidor.accept(); } catch (IOException ioe) { System.out.println(ioe); } 30

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 PrintStream(socket.getOutputStream()); out.print(cadena); 31

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 cada una de ellas. 32

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 GET archivo HTTP/1.1 33

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 aplicaciones intercambian paquetes de datos llamados datagramas. 34

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 receptores. 35

Cliente y servidor de datagramas Escribir un cliente y un servidor de datagramas. El servidor enviará frases contenidas en un archivo de texto. 36