diapositivas para socket

53
Conectividad en Java IV

Upload: juanaves

Post on 21-Oct-2015

67 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diapositivas Para Socket

Conectividad en Java

IV

Page 2: Diapositivas Para Socket

TCP/IP e InternetTCP/IP e Internet

IV.2

Page 3: Diapositivas Para Socket

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 4: Diapositivas Para Socket

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.

Page 5: Diapositivas Para Socket

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

Page 6: Diapositivas Para Socket

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 7: Diapositivas Para Socket

Comunicación entre computadoras

Es un proceso muy complicado

Demasiados detalles:� Hardware

� señales

� voltajes

� cables

� etc.

� Software:� Programas

� Protocolos

� Aplicaciones

� etc.

Page 8: Diapositivas Para Socket

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:

Page 9: Diapositivas Para Socket

Modelo de Capas

Ejemplo: envío de una carta1. El jefe pide a su secretaria que transcriba y

envíe una carta de felicitación de aniversario a su esposa. Asume que la esposa recibirá la carta (Aplicación)

2. La secretaria la transcribe y la pone en un sobre. Debe estar pendiente de que la esposa la reciba. La entrega al mensajero. (Transporte)

3. El mensajero la deposita en el buzón de salida. No se preocupa de verificar que la esposa haya recibido la carta. (Red)

4. El servicio postal se encarga de transportar la carta y ponerla en el buzón de la esposa. No se preocupa si la esposa la recibió o nó. (Enlace)

Page 10: Diapositivas Para Socket

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.1

localhost

135.17.98.250

Page 11: Diapositivas Para Socket

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

Page 12: Diapositivas Para Socket

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 13: Diapositivas Para Socket

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

Page 14: Diapositivas Para Socket

Trabajando con redesTrabajando con redes

IV.2

Page 15: Diapositivas Para Socket

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

Page 16: Diapositivas Para Socket

Paquete java.netObjectObject

ServerSocketServerSocket

SocketSocket

InetAddressInetAddress

DatagramPacketDatagramPacket

DatagramSocketDatagramSocket

URLURL

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 17: Diapositivas Para Socket

Direcciones IPDirecciones IP

IV.2

Page 18: Diapositivas Para Socket

Clase InetAddress

Devuelve el nombre de la máquina (host)

getHostName()

Devuelve la dirección IP del host

getHostAddress()

Devuelve un objeto InetAddress asociado al nombre del 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 19: Diapositivas Para Socket

Ejemploimport java.net.*;public class DireccionIP {public static void main(String[] args) {try {InetAddress host=InetAddress.getByName("www.itver.edu.mx");System.out.println("Host="+host);System.out.println("IP="+host.getHostAddress());System.out.println("Nombre="+host.getHostName());System.out.println(

"Localhost="+InetAddress.getLocalHost());}catch(UnknownHostException ex){System.err.println("Host desconocido");System.exit(0);}}}

import java.net.*;public class DireccionIP {public static void main(String[] args) {try {InetAddress host=InetAddress.getByName("www.itver.edu.mx");System.out.println("Host="+host);System.out.println("IP="+host.getHostAddress());System.out.println("Nombre="+host.getHostName());System.out.println(

"Localhost="+InetAddress.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

Page 20: Diapositivas Para Socket

Ejemploimport java.net.*;public class DireccionIP {public static void main(String[] args) {try {InetAddress host=InetAddress.getByName("www.itver.edu.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);}}}

import java.net.*;public class DireccionIP {public static void main(String[] args) {try {InetAddress host=InetAddress.getByName("www.itver.edu.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 21: Diapositivas Para Socket

Recursos de la WebRecursos de la Web

IV.2

Page 22: Diapositivas Para Socket

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 23: Diapositivas Para Socket

Lectura desde un URL

URL.openStream()

InputStreamReader

Maneja bytes como caracteres

BufferedReader

readLine()

Contenido de

una página

Filtro

Abrir flujo de bytes

Page 24: Diapositivas Para Socket

Ejemploimport java.io.*;import java.net.*;public class ManejoURL {public static void main(String[] args){try {URL url = new URL("http://mx.geocities.com/hector_andrade");

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) {...}}}

import java.io.*;import java.net.*;public class ManejoURL {public static void main(String[] args){try {URL url = new URL("http://mx.geocities.com/hector_andrade");

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 25: Diapositivas Para Socket

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="#808000" text="#000000" background="back.gif" topmargin=0 leftmargin=0><a name=top></a>

<table border=0

Page 26: Diapositivas Para Socket

Cliente / ServidorCliente / Servidor

IV.2

Page 27: Diapositivas Para Socket

Cliente/servidor

Un cliente necesita algún tipo de información

Un servidor tiene 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.

Page 28: Diapositivas Para Socket

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 29: Diapositivas Para Socket

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 …

Page 30: Diapositivas Para Socket

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 31: Diapositivas Para Socket

Sockets TCPSockets TCP

IV.2

Page 32: Diapositivas Para Socket

Sockets

Un 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 33: Diapositivas Para Socket

Usando un socket TCPUn cliente:

1. Abre un socket

2. Abre flujos de entrada y

salida para el socket

3. Lee y escribe en los flujos

de acuerdo con los

protocolos del cliente

4. Cierra los flujos

5. Cierra el socket

Un servidor:

1. Abre un socket

2. Acepta (espera) una

conexión

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

Page 34: Diapositivas Para Socket

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 35: Diapositivas Para Socket

Clase Socket (cliente)Socket()

Socket(InetAddress address, int port);

Socket(String host, int port);

Crea un socket en el cliente

Consigue el flujo de bytes de salida del socket

getOutputStream()

Consigue el flujo de bytes de entrada del socket

getInputStream()

DescripciónMétodo

Page 36: Diapositivas Para Socket

Ejemplo para Servidor

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

} catch (IOException ioe){...}

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

} catch (IOException ioe){...}

Crea el

socket en el

puerto (port)

Servidor

Puerto

Socket Un servidor puede atender

varios clientes en un

puerto, abriendo varios

sockets

Page 37: Diapositivas Para Socket

Ejemplo para Servidor

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

Espera a un cliente y

acepta la 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

Page 38: Diapositivas Para Socket

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 39: Diapositivas Para Socket

Ejemplo para Servidor...System.out.println("El cliente es "+reader.readLine());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

clienteEnvía datos al cliente

Servidor Cliente

readln()

write()

Page 40: Diapositivas Para Socket

Ejemplo para Servidor

Al correr el programa se presenta

la siguiente información:

El puerto utilizado por el socket es: 3032

Los clientes deberán conectarse a este servidor

usando este puerto

La dirección IP del servidor es:

Proy-Inv/10.10.200.103

Esperando un clienteEs 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 41: Diapositivas Para Socket

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

Page 42: Diapositivas Para Socket

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 43: Diapositivas Para Socket

Ejemplo para Cliente

InputStream flujoBE = cliente.getInputStream();Reader flujoCE = new InputStreamReader(flujoBE);BufferedReader reader = new BufferedReader(flujoCE);OutputStream flujoBS = cliente.getOutputStream();Writer flujoCS = newOutputStreamWriter(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.

Page 44: Diapositivas Para Socket

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 45: Diapositivas Para Socket

Sockets UDPSockets UDP

IV.2

Page 46: Diapositivas Para Socket

Clase DatagramSocket

Los sockets TCP

necesitan que se

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 47: Diapositivas Para Socket

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

Page 48: Diapositivas Para Socket

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 49: Diapositivas Para Socket

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)

Page 50: Diapositivas Para Socket

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 51: Diapositivas Para Socket

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

Page 52: Diapositivas Para Socket

Servidor UDP

public void ChecaPaquetes() {while (true){try {

byte array[] = new byte[100];paqRecibido = new DatagramPacket(array,array.length);socketRecibe.receive(paqRecibido);String recibido = new String(paqRecibido.getData());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 53: Diapositivas Para Socket

Cliente UDPEl servidor y el cliente UDP tienen el casi el mismo código,

solo que el cliente debe indicar servidor al que se quiere

conectarpublic 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 = newDatagramPacket(array,array.length,host,5000);

socketEnvia.send(paqEnviado);...