28
1 Programación Programación Orientada a Objetos Orientada a Objetos con Java con Java Rafael Rivera López Departamento de Sistemas y Computación Invierno 2005 Veracruz, Ver. Programa de Formación y Actualización Docente 2 Temas Avanzados IV

Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

Embed Size (px)

Citation preview

Page 1: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

1

Programación Programación Orientada a Objetos Orientada a Objetos

con Javacon Java

Rafael Rivera López

Departamento de Sistemas y

Computación

Invierno 2005

Veracruz, Ver.

Programa de Formación y Actualización Docente

2

Temas Avanzados

IV

Page 2: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

3

TCP/IP e InternetTCP/IP e Internet

IV.2

4

URLs

Protocolo

Archivo

Host/Computadora

Cada pieza de información en la Web tiene una dirección de

identificación única llamada URL

(Uniform Resource Locator).

Ejemplo:

http://mx.geocities.com/progiii_rrl/page7.htm

Page 3: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

5

Elementos del URL

•Protocolo: Especifica como será accesada la información.

•Host: Es la máquina (nodo) origen de la información.

•File: Es el archivo que se requiere.

6

Demonio de HTTP

•La información de Internet se almacena en servidores Web.

•Se accesa a la información disponible con programas llamados demonios (HTTP-daemon).

•Un HTTPD es una aplicación que está activa en el servidor y que espera las solicitudes de

información.

Page 4: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

7

Interacción Navegador-HTTPD

host java.sun.com

Aplicación

de HTTPD Disco

Navegador

usuario solicita

http:// java.sun.com /index.html

Solicita /index.html

Envía el contenido

de index.html

8

Protocolo

9 344101

“Si conoce la extensión, capturela”

5

“Conectando a la extensión solicitada”

Un protocolo es un conjunto de reglas que definen el tipo de comunicación:

Page 5: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

9

Base de trabajo en red

La comunicación en red es complicada, por lo

que el trabajo se divide

Las funciones de red se dividen en capas. Cada función tiene

asociado un protocolo

Ethernet, Token-Ring, ...

Enlace

IPRed

TCP, UDPTransporte

HTTP, FTP, Telnet, ...Aplicación

Capa Protocolo

TCP/IP es el conjunto de protocolos para comunicación por internet:

10

Capa de RedTodo host conectado a la Internet tiene asociado una

dirección IP (135.17.98.240).

Adicionalmente, toda computadora tiene una dirección local (127.0.0.1) conocido como el localhost

Se puede asociar a cada host un nombre de host (hostname), por

ejemplo java.sun.com

127.0.0.1localhost

135.17.98.250

Page 6: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

11

Capa de transporte

Todas las capas son importantes, pero la capa de transporte es la que asegura la entrega de la información

entre hosts

La información que viaja en internet se divide en paquetes de longitud pequeña, que utilizan la red para

viajar

TCP/IP tiene dos protocolos de

transporte: TCP y UDP

12

Capa de transporte

Envía paquetes de forma independiente. No se garantiza el orden de llegada de los paquetes.No verifica el destino (sin conexión)

Más rápido

UDP (Protocolo de datagrama de usuario)

Verifica que el destino reciba los datos (orientado a conexión)Garantiza un flujo de datos confiable entre dos

computadoras. Mantiene el orden de los paquetes enviados.

TCP (Protocolo de control de transmisión)

Page 7: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

13

¿TCP ó UDP?

Transmisión de AudioTransmisión de video

Se utiliza UDP para:

HTTP (páginas Web)FTP (Transferencia de archivos remotos)Telnet (Terminal remota)

Se utiliza TCP para:

14

Puertos

Cada host en Internet puede ofrecer varios servicios (internet, copia de archivos, correo) a través de los diferentes protocolos existentes.

Los involucrados deben saber de antemano que tipo de servicio se utilizará.

Un puerto es una abstracción de software que se asocia a cada típo de servicio.

Un puerto es un número de 16 bits

que identifica a cada servicio ofrecido por un host (un servidor)

Page 8: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

15

Puertos

Cada destino en Internet es identificado por un host (dirección IP de 32 bits) y un puerto (16 bits).

¿por qué no se especifica un puerto al usar un navegador?

80252321

HTTP (Transferencia de Hipertexto)CorreoTelnet (conexión remota)FTP (Transferencia de archivos)

PuertoProtocolo

16

Trabajando con redesTrabajando con redes

IV.2

Page 9: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

17

El paquete java.net

El paquete java.net proporciona clases base para trabajar con redes

Contiene clases que admiten la comunicación cliente/servidor basada

en sockets

Proporciona clases para manejar direcciones IP y URL

18

Paquete java.netObject

ServerSocket

Socket

InetAddress

DatagramPacket

DatagramSocket

URL

Para cliente/servidor orientado a conexión

Para cliente/servidor sin conexión

Para información de una dirección IP

Para localizar recursos en Internet

Page 10: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

19

Direcciones IPDirecciones IP

IV.2

20

Clase InetAddress

Devuelve el nombre del objeto getHostName()

Devuelve la IP del objetogetHostAddress()

Devuelve un objeto InetAddress de un host

getByName(String)

Devuelve un objeto InetAddress de la máquina local

getLocalHost()

DescripciónMétodo

La clase InetAddress representa las direcciones del protocolo IP

Page 11: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

21

Ejemploimport java.net.*;public class DireccionIP {

public static void main(String[] args) {try {

InetAddress host=InetAddress.getByName("www.itver.e du.mx");System.out.println("Host="+host);System.out.println("IP="+host.getHostAddress());System.out.println("Nombre="+host.getHostName());System.out.println(

"Localhost="+InetAdress.getLocalHost());

catch(UnknownHostException ex){System.err.println("Host desconocido");System.exit(0);

Devuelve un objeto

asociado al nombre del

host

El nombre del

host

La IP del host

Devuelve un objeto

asociado al localhost

22

Ejemploimport java.net.*;public class DireccionIP {

public static void main(String[] args) {try {

InetAddress host=InetAddress.getByName("www.itver.e du.mx");System.out.println("Host="+host);System.out.println("IP="+host.getHostAddress());System.out.println("Nombre="+host.getHostName());System.out.println(

"Localhost="+InetAdress.getLocalHost());

catch(UnknownHostException ex){System.err.println("Host desconocido");System.exit(0);

SALIDA:Host : www.itver.edu.mx/148.208.233.80IP : 148.208.233.80Nombre : www.itver.edu.mxLocalhost: Proy-Inv/10.10.200.103

Page 12: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

23

Recursos de la WebRecursos de la Web

IV.2

24

Clase URL

La clase URL representa una Uniform Resource Locator, un apuntador a un recurso en la Web.

Un recurso puede ser algo tan simple como un archivo o un directorio, o puede ser una referencia a un objeto más complejo (una consulta a una base de datos, un motor de búsqueda)

Page 13: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

25

Lectura desde un URL

()URL.openStream

InputStreamReader

Maneja bytes como caracteres

BufferedReader

()readLine

Contenido deuna página

Filtro

Abrir flujo de bytes

26

Ejemploimport java.io.*;import java.net.*;public class ManejoURL { public static void main(String[] args){ try { URL url = new URL("http://mx.geocities.com/progiii_rrl/i ndex.html"); InputStreamReader flujo = new InputStreamReader(url.openStream()); BufferedReader filtro = new BufferedReader(flujo ); String linea; while ((linea=filtro.readLine())!=null) { System.out.println(linea); } filtro.close(); } catch (MalformedURLException ex){...} catch (IOException ex) {...} }}

Asocia un objeto a

un recurso Web

openStream abre un flujo de

bytes.

InputStreamReader cambia

bytes por caracteres.

BufferedReader permite leer

Strings

Page 14: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

27

Ejemplo

SALIDA:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta name="Generator" content="Microsoft Publisher 2000"><title>Programación III</title></head><body bgcolor="#ffffff" link="#cc6600" vlink="#8080 00" text="#000000" background="back.gif" topmargin=0 leftmargin=0><a name=top></a>

<table border=0

28

Cliente / ServidorCliente / Servidor

IV.2

Page 15: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

29

Cliente/servidor

Un cliente necesita algún tipo de información

Un servidor tiene mucha información que puede proporcionar.

Típicamente, un cliente se conecta a un servidor y solicita cierta información.

El servidor busca la información y

entonces la regresa al cliente.

30

Modelo Cliente/Servidor

64.208.34.100 www.google.com

193.6.124.88

200.17.77.12

puerto 80

Aplicación del

servidor

Aplicación

del cliente

Aplicación

del cliente

Page 16: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

31

Cliente / Servidor• Un cliente

- Inicia la conexión- Recupera datos- Despliega datos- Responde a la entradas

del usuario- Solicita más datos

• Ejemplos: Navegador,Chat

•Un servidor:-Responde a la conexión-Recibe la solicitud por

datos-Busca los datos-Los libera

•Ejemplos:

Web Server, Database Server, Domain Name

Server, Mail Server …

32

Cliente / Servidor

Se puede implementar un esquema cliente servidor

con el protocolo TCP:Utilizando las clases

ServerSocket y SocketO se puede implementar

con el protocolo UDP:Utilizando las clases

DatagramPacket y DatagramSocket

Page 17: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

33

Sockets TCPSockets TCP

IV.2

34

SocketsUn socket es un punto final de un enlace de dos vías entre dos programas ejecutándose en la red.Los sockets se utilizan para comunicarse a través de puertos.

Un socket es un canal de comunicación que permite trasferir datos entre un puerto.

Un socket se asocia a un puerto.

Cliente: Utilizando la clase Socket.

Servidor: Utilizando la clase ServerSocket

Page 18: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

35

Usando un socket TCPUn cliente:

2. Abre un socket

3. Abre flujos de entrada y

salida para el socket

4. Lee y escribe en los flujos de acuerdo con los protocolos del cliente

5. Cierra los flujos

6. Cierra el socket

Un servidor:

2. Abre un socket

3. Abre los flujos de entrada y

salida del socket

4. Lee y escribe en los flujos de acuerdo a los procolos del servidor.

5. Cierra los flujos

6. Cierra el socket

36

Clase ServerSocket (servidor)

ServerSocket(int port)

Crea un socket en el servidor en un puerto específico. Un puerto 0 crea un socket sobre un puerto libre.

Regresa el puerto en el cual el socket está asociado.

getLocalPort()

Regresa la dirección IP local del servidor.

getInetAddress()

Cierra el socketclose()

Acepta una conexión a este socket.

accept()

DescripciónMétodo

Page 19: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

37

Clase Socket (cliente) Socket() Socket(InetAddress address, int port); Socket(String host, int port);

Crea un socket en el cliente

Asocia un flujo de bytes de salida por el socket

getOutputStream()

Asocia un flujo de bytes de entrada por el socket

getInputStream()

DescripciónMétodo

38

Ejemplo para Servidor

import java.net.*;import java.io.*;public class ServidorTCP { public static void main(String[] args) { int port = 0; String cadena = "Mensaje del servidor"; ServerSocket server = null; try { server = new ServerSocket(port); ... } catch (IOException ioe){...}

Crea el socket en un puerto libre y

espera un

cliente

Servidor

Puerto

Socket Un servidor puede atender varios clientes en un

puerto, abriendo varios sockets

Page 20: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

39

Ejemplo para Servidor

try { Socket conexion = server.accept(); InputStream flujoBE = conexion.getInputStream(); Reader flujoCE = new InputStreamReader(flujoBE); BufferedReader reader = new BufferedReader(flujoCE ); ...

Acepta conexión

Abre flujos

Servidor Cliente

conexion.getInputStream()Flujo de bytes del cliente

InputStreamReaderManeja un flujo de

bytes como flujo de caracteres

BufferedReaderFiltro para leer Strings

40

Ejemplo para Servidor ... OutputStream flujoBS = conexion.getOutputStream(); Writer flujoCS = new OutputStreamWriter(flujoBS); BufferedWriter writer = new BufferedWriter(flujoCS ); ...

Abre flujos

Servidor Cliente

conexion.getOutputStream()Flujo de bytes del cliente

InputStreamWriterManeja un flujo de

caracteres como flujo de bytes

BufferedWriterFiltro para pasar

Strings como caracteres

Page 21: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

41

Ejemplo para Servidor... System.out.println("El cliente es "+reader.readLin e()); writer.write("Conectado a"+conexion.getInetAddress ()); writer.flush(); for(int i=0;i<cadena.length();i++){ writer.write(cadena.substring(0,cadena.length()-i )); writer.flush(); } reader.close(); writer.close(); conexion.close();

Lee del cliente

Envía datos al cliente

Servidor Cliente

readln()

write()

42

Ejemplo para Servidor

Al correr el programa se presenta la siguiente información:

El puerto utilizado por el socket es: 3032Los clientes deberán conectarse a este servidor usando este puertoLa dirección IP del servidor es:Proy-Inv/10.10.200.103Esperando un cliente

Es el número de puerto disponible, puede cambiar en

cada corrida

Esta es la dirección IP del servidor, necesaria para que el

cliente se conecte

Page 22: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

43

Lado del cliente

Servidor Cliente

readln()

write()

El cliente, para conectarse a un servidor con TCP, debe hacerlo indicando a que Servidor y en que puerto se va a conectar.

El método Socket(Servidor, puerto) permite crear una conexión TCP del cliente hacia el servidor

44

Ejemplo para Cliente

public static void main(String[] args) { int port = Integer.parseInt(args[1]); Socket cliente = null; try{ cliente = new Socket(args[0], port); } catch (IOException ioe) {...}

Los parámetros del cliente indican el nombre del

servidor y el puerto al cual

conectarse

Se crea una conexión con el servidor dado en args[0] en el

puerto indicado por args[1]

Se debe ejecutar el programa desde la línea de comandos:C:\>java ClienteTCP servidor puerto

Page 23: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

45

Ejemplo para Cliente

InputStream flujoBE = cliente.getInputStream(); Reader flujoCE = new InputStreamReader(flujoBE); BufferedReader reader = new BufferedReader(flujoCE ); OutputStream flujoBS = cliente.getOutputStream(); Writer flujoCS = new OutputStreamWriter(cliente.getOutputStream()); BufferedWriter writer = new BufferedWriter(flujoCS ); writer.write(InetAddress.getLocalHost()+"\n"); writer.flush(); String entrada; do{ entrada = reader.readLine(); System.out.println("Recibido: "+entrada); } while(entrada.length()>1);

De igual forma que el servidor, abre un flujo de escritura y uno de lectura.

46

Ejemplo para Cliente

Servidor Cliente

readln()

write() readln()

write()

Como es un esquema orientado a conexión, el enlace permanece hasta que se cierra por alguno de los participantes

Page 24: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

47

Sockets UDPSockets UDP

IV.2

48

Clase DatagramSocket

Los sockets TCP necesitan que se

indique establezca

una conexión.

Para hacer una trasmisión sin conexiones (UDP) se utiliza la

clase DatagramSocket.

No se asocia un flujo al puerto.

Cada paquete debe

indicar información del host origen y del host

destino

Page 25: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

49

Usando un DatagramSocket

Se requieren dos puertos para una comunicación UDP, uno de envio y

otro de recepción (El socket de recepción es 5000 y 5001, para este

ejemplo).

Servidor Cliente5000

5001

Para socket de recepciónDatagramSocket(puerto)

Para socket de envíoDatagramSocket()

DescripciónConstructor

50

Usando un DatagramSocket

Para enviar y recibir paquetes se utilizan los siguientes métodos.

Un paquete es un objeto de la clase DatagramPacket

Servidor Cliente5000

5001

Para recepciónreceive(DatagramPacket)

Para envíosend(DatagramPacket)

DescripciónMétodo

send()

receive() send()

Page 26: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

51

Usando DatagramPacket

Para construir el paquete a enviar se crea un objeto con este constructor:

Información enviada en un arreglo

de bytes

Longitud del

arreglo

de bytes

Dirección IP del destino

Puerto al que

se

envía

DatagramPacket(byte[] buf, int length, InetAddress address, int port)

Para construir el paquete que recibe se crea un objeto con este

constructor:

DatagramPacket(byte[] buf, int length)

52

Servidor UDPclass ServerUDP extends Frame{ ... public ServerUDP(){ ... try{ socketEnvia = new DatagramSocket(); socketRecibe = new DatagramSocket(5000); } catch (SocketException se){... } ... }

Crea los sockets de envío y recepción

Page 27: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

53

Servidor UDP

... captura.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try { byte array[] = new byte[100]; pantalla.append("Servidor: "+captura.getText( )+"\n"); array = captura.getText().getBytes(); paqEnviado = new DatagramPacket(array,array.length,host,5001 ); socketEnvia.send(paqEnviado); captura.setText(""); }catch (Exception ex) {... } } }); }

El objeto captura es un TextField donde se captura la información a enviar

Se construye el paqueta a enviar

Se envía el paquete

54

Servidor UDP

public void ChecaPaquetes() { while (true){ try { byte array[] = new byte[100]; paqRecibido = new DatagramPacket(array,array.le ngth); socketRecibe.receive(paqRecibido); String recibido = new String(paqRecibido.getDat a()); host = paqRecibido.getAddress(); pantalla.append(host.getCanonicalHostName()+": "+recibido); pantalla.append("\n"); } catch (Exception ex){...} }}

El método checa paquetes está escuchando al puerto de entrada si se reciben paquetes

El servidor identifica al cliente que inicio la conversación y a ese cliente es al que le contesta

Page 28: Programación Orientada a Objetos con Java ·  · 2011-03-04Orientada a Objetos con Java Rafael Rivera López Departamento de Sistemas y ... Cada pieza de información en la

55

Cliente UDPEl servidor y el cliente UDP tienen el casi el mismo código, solo que el cliente debe indicar a que servidor se conecta

public ClienteUDP(String servidor){ try { socketEnvia = new DatagramSocket(); socketRecibe = new DatagramSocket(5001); host = InetAddress.getByName(servidor); } ...}

captura.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ paqEnviado = new DatagramPacket(array,array.length,host,5000); socketEnvia.send(paqEnviado);...