Diferencia entre revisiones de «Usuario:ManuelRomero/net»
De WikiEducator
(→=Constructores) |
(→Ejemplo 5=) |
||
(6 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 93: | Línea 93: | ||
===java.net.ServerSocket=== | ===java.net.ServerSocket=== | ||
− | Crea un socket en el servidor ''socket pasivo'' | + | *Crea un socket en el servidor ''socket pasivo'' |
− | Este se queda esperando a que llegue una solicitud de conexión con otro socket de cliente ''socket activo'' | + | *Este se queda esperando a que llegue una solicitud de conexión con otro socket de cliente ''socket activo'' |
− | Esto se hace invocando al método accept() | + | *Esto se hace invocando al método accept() |
ServerSocket servidor = new ServerSocket() | ServerSocket servidor = new ServerSocket() | ||
Socket comunicacionCliente = new ServerSocket(); | Socket comunicacionCliente = new ServerSocket(); | ||
Línea 143: | Línea 143: | ||
:UnknownServiceException | :UnknownServiceException | ||
:UnknownHostException | :UnknownHostException | ||
− | ==Ejemplo 1== | + | ==Ejemplo 1 : ConexionLocal== |
− | + | Obtener con la clase InetAddress información de la ip y nombre de mi propio equipo | |
− | + | Obtener cada byte de la ip getAddress | |
− | + | Obtener la ip completa getHostAddress | |
− | + | Obtener el nombre del equipo getHostName | |
− | + | ==Ejemplo 2 ConexiónWeb== | |
+ | Crear un socket cliente que se conecte con un servidor web | ||
+ | nombre = www.google.es | ||
+ | puerto = 80 | ||
+ | Crear un obejto de tipo ç | ||
+ | InetAddress direccion = InetAddress.getByName("www.goggle.es"); | ||
+ | *establecer una dirección a la web | ||
+ | Socket socket = new Socket(direccion,80); | ||
+ | *Obtener información de la conexión establecida | ||
+ | **donde me he conectado | ||
+ | socket.getInetAddress() | ||
+ | **Por qué puerto | ||
+ | socket.getPort() | ||
+ | **Puerto local | ||
+ | socket.getLocalPort() | ||
+ | **Direccion local | ||
+ | socket.getLocalAddress() | ||
+ | ==Ejemplo 3 Servidor== | ||
+ | accept() trows IOException crea un objeto socket en el servidor | ||
+ | getInetAddress() ==> Objeto InetAddress del socket | ||
+ | getLocalPort() ==> Puerto por el que está escuchando el servidor | ||
+ | close() ==> Cierre el socket | ||
+ | |||
+ | *Crear un servidor | ||
+ | ServerSocket servidor =new ServerSocket(puerto); | ||
+ | |||
+ | *Dejar al servidor esperando | ||
+ | Socket cliente = servidor.accept(); | ||
+ | *Una vez conectado dar información del equipo que se ha conectado | ||
+ | <source lang=java> | ||
+ | InetAddress direccion = cliente.getInetAddress(); | ||
+ | System.out.println("Se han conectado con el servidor"); | ||
+ | System.out.println("Equipo conectado "+direccion); | ||
+ | System.out.println("Nombre local "+direccion.getHostName()); | ||
+ | </source> | ||
+ | instala el telnet y pruébalo | ||
+ | probar con máquinas de la compañera/o | ||
− | + | ==Ejemplo 4 mandar mensajes== | |
− | + | *Se trata de que el servidor mande un mensaje y los pueda recibir el cliente | |
− | + | *Tenemos dos acciones: | |
− | + | **El servidor envía un mensaje | |
− | + | **El cliente lee un mensaje | |
− | + | ;En el servidor | |
− | + | :un canal para escribir y enviar al cliente desde el socket del servidor | |
− | + | DataOutputStream salida = new DataOutputStream(servidr.getOutputStream()); | |
− | + | :para escribir usamos el método writeUTF(String ) | |
− | + | salida.write("Hola cliente te has conectado"); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ;En el cliente | |
− | </ | + | :un canal para leer lo que le llegue al socket |
+ | DataInputStream entrada = new DataInputStream(cliente.getInputStream()); | ||
+ | ;para leer | ||
+ | String linea = entrada.readUTF(); | ||
+ | Hacer un programa en el que el servidor le envíe un mensaje como que se ha conectado | ||
+ | =Ejemplo 5== | ||
+ | <br/> | ||
+ | {{Actividad|*Con lo aprendido se pretende hacer un programa por parejas para chatear aunque de una manera muy rudimentaria | ||
+ | *Lo haremos en modo simplex uno escribe y cuando haya recibido entonces puede escribir él y el otro lee | ||
+ | *Uno hará de cliente y el otro de servidor}} |
Última revisión de 13:08 11 may 2012
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
Contenido
- 1 Comunicaciones y redes
- 2 Definición
- 3 Definición
- 4 Objetivo
- 4.1 Capas del modelo OSI
- 4.2 Proceso de encapsulacion y desencapsulacion
- 4.3 Modelo TCP/IP
- 4.4 Concepto de socket y capa de transporte
- 4.5 Clases de java para socket
- 4.6 Pasos para realizar una aplicación clinete/servidor con TCP
- 4.7 Clases de java para desarrollo de comunicaciones
- 4.8 Ejemplo 1 : ConexionLocal
- 4.9 Ejemplo 2 ConexiónWeb
- 4.10 Ejemplo 3 Servidor
- 4.11 Ejemplo 4 mandar mensajes
- 5 Ejemplo 5=
- 6 Actividad
Comunicaciones y redes
Conceptos básicos de redes
'Red' Conjunto de dispositivos interconectados con la capacidad de intercambiar y compartir recursos |
- Idea de malla o red de pescar
- Puedo ir de un nodo o dispositivo a cualquier otro nodo o dispositivo sin abandonar la red
- Existen diferentes tipos de redes
- La más conocida y usada la red de tipo Tcp/ip o red de internet (red de redes)
- Necesidad de indentificar de forma única cada dispositivo de la red
- Necesidad de que el emisor conozca la identificación del dispositivo o nodo con el que quiere contactar
Términos usados en redes
- Protocolo: Un programa que implementa la comunicación entre dos elementos
- A nivel de aplicación lo invoca el usuario
- A otro nivel es parte del kernel del SO
- Servicio
- Modelo de referencia: 'Capas del modelo'
- Este tema está desarrollado de forma más detellada en muchos sitios
- Puedes acceder al siguiente url para poder ver apuntes de Cisco sobre la red y los protocolos
Podemos ver el siguiente corto para entender un poco más de redes
http://www.youtube.com/watch?v=XeldfbDijUY&feature=related
Protocolo conjunto de reglas y normas establecidas para que dos partes se puedan entender |
- Ejemplo: Un director chino quiere hacer un negocio con un director alemán, entre ellos directamente no se puede entender:
Modelo de referencia OSI Vs TCP/IP
- PDU Información de cada una de las capas
- Cabecera Datos que permiten que cada capa realice su cometido
- Aplicacion Interactúa con el usuario, DNS, HTTP
- Transporte TCP UDP Puerto
- Red|Internet IP (ICMP, ARP/RARP) Direcciones IP (red/host) Enrutar: encontrar el camino para llegar a alcanzar la red destino
- Enlace|Acceso al medio Ethernet, Token Ring, Frame Relay (tecnologías de red) Trama Direcciones MAC Cola Verificar validez de la trama
Capas del modelo OSI
Proceso de encapsulacion y desencapsulacion
Modelo TCP/IP
Concepto de socket y capa de transporte
- En la capa de transporte tenemos dos protocolos
- TCP Seguro, orientado a la conexion y con control de flujo, lento y pesado
- UDP rápidlo, ligero, no seguro, no orientado a la conexión sin control de flujo
Ambos identifican con un puerto la aplicación/conversación concreta a la que va destinada el paquete
- Socket
- Representa los terminales de la conexión entre dos máquinas o servicios
- Estos terminales se unen por la red física de la cual no tenemos porque saber absolutamente nada
- Los socket son creados por el sistema operativo
- El API de java java.net y java.nio tienen métodos para que el programa pueda invocar al SO para que cree un socket
- el socket tiene métodos para poder envier mensajes a otras aplicciones las cuales los recibierán en su socket
- La aplicacion tiene métodos para que el so cree un socket para usar
- Existen dos tipos de socket
- socket activos
- Se conecta con el servidor, envía y recibe datos, se ubican tanto en el cliente como en el servidor)
- socket pasivos
- Esperan conexiones de los clientes y se ubican al lado del servidor
- Un socket tiene información que le identifica
- Puerto
- Direccion IP
- Tipo de protocolo
Clases de java para socket
- UDP
- DatagramPacket Para crear datagramas UDP
- MulticastSocket
- DatagramaSocket: Hereda del anterior permite crear un socket para enviar informción
- TCP
- Socket
- ServerSocket
- Ambos para manipulación de direcciones de internet
- URL
- URLEncoder
- InetAddress
java.net.Socket
Crea un socket con la capacidad de envier y transmitir datos
Constructores
protected Socket() throws SocketException protected Socket() public Socket(String host, int puerto) throws UnknownHostException, IOException public Socket(InetAddress direccion, int puerto)throws IOException public Socket(String host, int puerto,InetAddress dirLocal, int puertoLocal) throws IOException public Socket(String host, int puerto) throws UnknownHostException, IOException
java.net.ServerSocket
- Crea un socket en el servidor socket pasivo
- Este se queda esperando a que llegue una solicitud de conexión con otro socket de cliente socket activo
- Esto se hace invocando al método accept()
ServerSocket servidor = new ServerSocket() Socket comunicacionCliente = new ServerSocket(); comunicacioneCliente = servidor.accept();
Constructores
public ServerSocket (int puerto) thows IOExcpetion public ServerSocket (int puerto, int longitudCola) thows IOExcpetion public ServerSocket (int puerto, int longitudCola, InetAdress dirInternet) thows IOExcpetion
Pasos para realizar una aplicación clinete/servidor con TCP
- Se deben crear socket en el cliente (activos) y en el servidor (pasivos)
- El socket servidor se crea en un puerto que será el que establezca la conexión para la aplicación
- El socket pasivo se queda esperando o escuchando a que lleguen solicitudes por parte de otro socket activo por el puerto establecido (Sólo escucha ese puerto)
- El cliente lanza una solicitud de conexión al servidor
- El servidor acepta la solicitud (eso es lo esperado :))
- Se realizan intercambio de datos
- Se cierran las conexiónes
Identificadon un dispositivo de red
- Direccion IP
- URL Localizador Unico de Recurso
Formato para identificar un recurso en la red
servicio://maquina.dominio:puerto/camino/fichero
- Servicio
- Identifica el protocolo que vamos a usar para acceder
- máquina.dominio
- Identifica el nombre de la máquina dentre de un subdominio de un dominio o directamente dentro de un dominio
- Camino
- Es el path dentro de la máquina donde se ubica el recurso
- Fichero
- El recurso al que quiero acceder
Clases de java para desarrollo de comunicaciones
Paquete java.net java.nio
- Clases para el API con socket del SO
- ServerSocket ==> Permite definir socket pasivos
- Socket ==>Permite definir socket activos
- Clases para trabajar con URL
- URL
- InetAddress ==>
- Excepciones
- ServerException
- UnknownServiceException
- UnknownHostException
Ejemplo 1 : ConexionLocal
Obtener con la clase InetAddress información de la ip y nombre de mi propio equipo
Obtener cada byte de la ip getAddress Obtener la ip completa getHostAddress Obtener el nombre del equipo getHostName
Ejemplo 2 ConexiónWeb
Crear un socket cliente que se conecte con un servidor web nombre = www.google.es puerto = 80 Crear un obejto de tipo ç
InetAddress direccion = InetAddress.getByName("www.goggle.es");
- establecer una dirección a la web
Socket socket = new Socket(direccion,80);
- Obtener información de la conexión establecida
- donde me he conectado
socket.getInetAddress()
- Por qué puerto
socket.getPort()
- Puerto local
socket.getLocalPort()
- Direccion local
socket.getLocalAddress()
Ejemplo 3 Servidor
accept() trows IOException crea un objeto socket en el servidor getInetAddress() ==> Objeto InetAddress del socket getLocalPort() ==> Puerto por el que está escuchando el servidor close() ==> Cierre el socket
- Crear un servidor
ServerSocket servidor =new ServerSocket(puerto);
- Dejar al servidor esperando
Socket cliente = servidor.accept();
- Una vez conectado dar información del equipo que se ha conectado
InetAddress direccion = cliente.getInetAddress(); System.out.println("Se han conectado con el servidor"); System.out.println("Equipo conectado "+direccion); System.out.println("Nombre local "+direccion.getHostName());
instala el telnet y pruébalo probar con máquinas de la compañera/o
Ejemplo 4 mandar mensajes
- Se trata de que el servidor mande un mensaje y los pueda recibir el cliente
- Tenemos dos acciones:
- El servidor envía un mensaje
- El cliente lee un mensaje
- En el servidor
- un canal para escribir y enviar al cliente desde el socket del servidor
DataOutputStream salida = new DataOutputStream(servidr.getOutputStream());
- para escribir usamos el método writeUTF(String )
salida.write("Hola cliente te has conectado");
- En el cliente
- un canal para leer lo que le llegue al socket
DataInputStream entrada = new DataInputStream(cliente.getInputStream());
- para leer
String linea = entrada.readUTF();
Hacer un programa en el que el servidor le envíe un mensaje como que se ha conectado
Ejemplo 5=