TCP/IP Protocolos, Sockets, Exposición Universidad Americana de Acapulco Maestría en Ciencias de la Computación Modulo: Protocolo TCP/IP Trabajos: Practica de Protocolos Sockets Exposición del Proyecto Win 2000 Equipo No 2: Diana Nogueda Anaya Manfred Camero García Nereo Hernández Sosa Profesor: M.C.C. Enrique Torres Campos Acapulco, Gro. Junio de 2003 Página 1 de 39 TCP/IP Protocolos, Sockets, Exposición Índice I. Practica de Protocolos.............................................................................. 3 I.I .- Objetivo ................................................................................................. 3 I.II .- Configuración del Servicio FTP............................................................. 3 I.III .- Configuración del Servicio TELNET. ..................................................... 4 I.IV.- Configuración del Servicio HTTP........................................................... 6 I.V.- Configuración del Servicio DHCP .......................................................... 8 I.VI.- Análisis de Protocolos con Network Monitor.......................................... 9 1.- Datagrama HTTP .............................................................................. 9 2.- Datagrama FTP................................................................................. 10 3.- Datagrama TELNET.......................................................................... 11 4.- Datagrama DHCP ............................................................................. 12 5.- Datagrama UDP................................................................................ 13 I.VII.- Conclusiones ........................................................................................ 14 II. Sockets...................................................................................................... 15 II.I.- Corrida del Programa de Sockets en Lenjuage JAVA......................... 15 II.II.- Código Fuente Documentado del Cliente............................................ 18 II.III.- Código Fuente Documentado del Servidor ......................................... 21 III. Exposición del Avance de Proyecto Windows 2000 ............................ 24 III.I.- Diapositivas ........................................................................................ 24 Página 2 de 39 TCP/IP Protocolos, Sockets, Exposición I.- Practica de Protocolos en Windows 2000 Server Advanced I.I.- OBJETIVO. • ¡ • Instalar, configurar y poner en marcha los distintos servicios de nivel de aplicación del modelo TCP/IP en el sistema operativo Windows 2000 Server Advanced. Analizar el tráfico de red que pasa por el servidor en las distintas capas del modelo TCP/IP con el analizador de protocolos Network Monitor. I.II.- CONFIGURACION DEL SERVICIO FTP EN WINDOWS 2000 SERVER ADVANCED. • Se ingresa la dirección IP del servidor donde se dio de alta el servicio, en el cuadro IP Address. Página 3 de 39 TCP/IP Protocolos, Sockets, Exposición Después se especifica el directorio a compartir donde accesarán los usuarios que se conecten al servicio, en el recuadro Local Path. Posteriormente se puede especificar la forma en que se desplegaran los archivos en el directorio. Hay dos opciones, UNIX y MS-DOS, seleccionando en nuestro caso UNIX. Y por ultimo damos clic en OK. I.III.- CONFIGURACION DEL SERVICIO TELNET. Se verifica que en los servicios, este iniciado el servicio de Telnet, viendo en la columna status, que diga Started, en caso contrario, seleccionarlo, botón derecho, y dar clic en Start, el cual cambiara el status del servicio. Página 4 de 39 TCP/IP Protocolos, Sockets, Exposición Posteriormente, sobre el servicio de Telnet, se da clic con el botón derecho sobre el mismo, después propiedades, se especifica la cuenta que tendrá conexión mediante el servicio Telnet. Se introduce su contraseña y por ultimo se da clic en OK. Página 5 de 39 TCP/IP Protocolos, Sockets, Exposición I.IV.- CONFIGURACION DEL SERVICIO HTTP. Se da clic en la carpeta Default Web Site o Administration Web Site, haciendo mención que el segundo es para cuando se quieren administrar varios sitios Web en el mismo servidor. Para esta practica, elegimos el primero. Damos clic con el botón derecho sobre el Default Web Site, elegimos Propiedades, y aparece la siguiente ventana. En esta ventana, se especifica la ruta del directorio en Local path donde se alojan los archivos con formato .html para ser puestos a disposición de los usuarios que se conecten al servidor http. Debajo de este, se le especifican los derechos del directorio al cual tendrán acceso los usuarios. Posteriormente en el Explorador de Windows, se selecciona la carpeta que tiene dichos servicios, después botón derecho, elegir Compartir, clic en la ficha Web Sharing, y se elige Share this folder. Clic en OK. Esto es todo lo que se configura básicamente para levantar el servicio http en el servidor. Página 6 de 39 TCP/IP Protocolos, Sockets, Exposición Para ver la pagina desde cualquier cliente en la red, tecleamos en la barra de dirección del explorador, el siguiente URL: http://server/equipo2/index.htm y se visualiza la siguiente pagina, la cual es una pagina web sencilla hecha por nosotros para esta practica, con fines ilustrativos. Página 7 de 39 TCP/IP Protocolos, Sockets, Exposición I.V.- CONFIGURACION DEL SERVICIO DHCP. Para instalar este servicio, debemos de asegurarnos que esta instalado dentro de las opciones del IIS, en la opción Networking Services. En caso de no estarlo, se agrega desde el CD de instalación de Windows 2000 Server. Una vez que esta instalado en el servidor el servicio DHCP, desde la carpeta Services, seleccionamos DHCP y ver si esta iniciado el servicio viendo en el status Started, en caso contrario, dar clic con el botón derecho sobre este mismo, elegir Start para iniciar el servicio. Si el servicio esta iniciado, aparece un icono con el nombre del servidor, donde se configura el servicio DHCP, como son los alcances (que son las direcciones IP que pueden ser reservadas por el administrador de la red), habilitar la auditoria, entre otras. Una vez configuradas las opciones necesarias del servicio DHCP en nuestro servidor, puede ser utilizado por los clientes de la red. Página 8 de 39 TCP/IP Protocolos, Sockets, Exposición I.VI.- ANALISIS DE PROTOCOLOS CON LA HERRAMIENTA NETWORK MONITOR. 1.- DATAGRAMA HTTP. Al cargar la pagina web que configuramos en el servicio http desde un cliente de la red, podemos ver los paquetes enviados por el servidor al cliente como respuesta a la solicitud del servicio. A continuación se muestra la pantalla de captura con el analizador de protocolos. Se distinguen las 4 capas implementadas en el protocolo TCP/IP. • Frame._ Capa física. • Ethernet._ Capa de enlace; vemos la dirección de la MAC-ADDRESS origen y destino, el tipo de protocolo de capa superior, que para este caso es IP. • IP._ Capa de red. En esta capa podemos ver elementos como la versión del protocolo IP usado, los flags, el offset, que en este caso tiene el valor de o, es decir, no se fragmentó el paquete al viajar por la red; el TTL (tiempo de vida del paquete) que tiene un valor de 128, el tipo del protocolo de capa superior que es igual a TCP para este caso y las direcciones IP origen y destino, los cuales identifican a los clientes que iniciaron la transmisión de datos en la red. Página 9 de 39 TCP/IP Protocolos, Sockets, Exposición • TCP._ Capa de transporte, muestra el puerto origen en el cual fue solicitado el servicio en este caso es http, y el puerto destino asignado por el S.O. al cual se enviará la información solicitada, el no. de reconocimiento, el data offset, el cual es el no. de paquete en el cual dentro de esta capa, será reconstruido el paquete completo, tiene un valor de 20; también tiene flags y el checksum para verificar los errores en el paquete. • HTTP._ Capa de aplicación, muestra el valor del puerto asignado en el cliente por el S.O., tiene un valor de 1433. 2.- DATAGRAMA FTP. Para este servicio, se capturó esta pantalla la cual describimos a continuación. Las capas física y de enlace muestran la misma información que la pantalla anterior, por lo que se omitirá explicarlas. Solo detallaremos la capa de aplicación. En ella se muestra el total de bytes restantes que quedan para completar la transferencia. La operación que hicimos fue subir un archivo de aproximadamente 9 MB al directorio FTP. Página 10 de 39 TCP/IP Protocolos, Sockets, Exposición 3.- DATAGRAMA TELNET. A continuación mostramos la pantalla del servicio Telnet. En la capa de aplicación, podemos ver los comandos que son enviados al cliente por el servidor, los cuales son en respuesta a una solicitud generada por el cliente. Página 11 de 39 TCP/IP Protocolos, Sockets, Exposición 4.- DATAGRAMA DHCP. Este servicio es solicitado desde el cliente hacia el servidor, solicitando una dirección IP que le sea asignada dinámicamente por este último. En la pantalla vemos en la capa de aplicación, que es una solicitud (request) hecha por el cliente al servidor DHCP. Se puede observar el tipo de hardware, es decir, la topología de la capa de enlace que es ethernet, los saltos hechos para llegar hasta aquí, valor cero, no ha hecho ninguno, lo cual significa que está dentro del mismo segmento de red que el servidor; las flags también se hacen presentes; la dirección IP asignada al cliente así como dirección de la MAC-ADDRESS cliente y por último el nombre del servidor. Página 12 de 39 TCP/IP Protocolos, Sockets, Exposición 5.- DATAGRAMA UDP. Es un protocolo que sirve funciona en la capa de transporte, el cual es no orientando a conexión, lo que significa que no asegura que lleguen los paquetes a su destino, por no contar con algoritmos internos propios para este hecho. A continuación mostramos la pantalla capturada. En ella podemos ver el puerto origen y el destino, que para este caso fue un puerto utilizado por el servicio TFTP. La longitud del paquete, el checksum del UDP el cual sirve para verificar los errores y el número total de bytes restantes. Página 13 de 39 TCP/IP Protocolos, Sockets, Exposición I.VII.- CONCLUSIONES. La correcta configuración de cada servicio en el servidor, hará que cuando este sea solicitado por los clientes en la red, les satisfaga sus necesidades particulares de cada uno de ellos. Relativamente, la instalación, configuración y puesta en marcha de cada uno de ellos es relativamente fácil, siendo el factor más crítico el saber para que sirven y como funcionan cada una de las opciones que ofrecen. Si se tiene conocimiento previo de todas estas, no habrá gran problema para poner el servicio. Con el analizador de protocolos Network Monitor incluido con Windows 2000 Server Advanced, puede analizarse los paquetes en un estación en la red, con el fin de hacer un análisis detallado de los paquetes que circulan por la estación de trabajo donde se ejecuta el programa. La ventaja de este analizador, es que pueden verse los paquetes y datagramas en las distintas capas del protocolo TCP/IP, y con esto, ser un apoyo en el análisis y diagnóstico del estado de la red, así como de la información que por ella circula. Dado que este software viene limitado a solo a analizar el tráfico de red que pasa por una estación de trabajo, su ayuda en redes de gran escala es poca, por lo que se necesitaría un analizador con más alcance, donde se pueda analizar el tráfico en cualquier parte de la red. Página 14 de 39 TCP/IP Protocolos, Sockets, Exposición II.- Sockets. II.I.- Corrida del Programa de Sockets Realizado en lenguaje JAVA. El siguiente programa tiene la finalidad de demostrar como funciona el TCP, que es un protocolo orientado a la conexión, es decir, al enviar un mensaje a otro equipo este tiene que devolver otro mensaje de que ha llegado a su destino el primero. A continuación tenemos una pantalla donde se esta ejecutando el servidor , el cual estara escuchando en le puerto 2000 si algun otro equipo se conecta a este puerto. Pantalla No.1.- Ejecución del Servidor En la pantalla 1, se esta ejecutando el servidor y nos muestra la direccion IP en la que se esta ejecutando, cuando corre la primera da como default 0.0.0.0 eb el puesto 2000. En la Pantalla no 2 se esta ejecutando el cliente y se conectara a la direccion IP del servidor, en este caso es lel mismo equipo. El Cliente mandara un mensaje al servidor, y este regresara la el mismo mensaje pero con con las letras al inverso, es decir “¿Que es esto? “, y regresara “?otse se euq¿ “ . Con esto se desmuestra la conexión o como funcionaria el TCP,. Página 15 de 39 TCP/IP Protocolos, Sockets, Exposición Pantalla No 2..- Ejecución del Cliente. En la pantalla del cliente se visualiza que se envia un mensaje y devuelve el mismo mensaje pero a la inversa. En la pantalla No. 3 me conecte a Internet y me dio una direccion IP a mi equipo, la 192.168.20.90, la cual aparecera en la pantalla del servidor. Pantalla No. 3 Al correr otra sesion del cliente, en el servidor se ve reflejado nuevamente la direccion IP que enta conectandose en ese momento al servidor y se iran Página 16 de 39 TCP/IP Protocolos, Sockets, Exposición reflejando paulatinamente todas las conexiones que hagan uso de ese puerto del servidor como se muestra en la pantalla No. 4. Pantalla No. 4.Muestra las conexiones de clientes en el servidor. Pantalla No. 5.- Ejecucion de dos clientes y el servidor. Página 17 de 39 TCP/IP Protocolos, Sockets, Exposición En la pantalla No-5 se muestra en la ventana del servidor la conexión IP de los clientes que se han conectado a el, y en la respectivas pantallas de cada cliente parece el mensaje y la contestación del mismo como se ha mencionado anteriormente. Ahora mostraremos el codigo fuente tanto del Cliente como del Servidor. II.II.- Codigo Fuente del Cliente. CODIGO FUENTE DEL CLIENTE import java.io.*; import java.net.*; /** * clase para demostrar el uso de stream sockets en Java * * Cliente TCP */ class TcpC { private Socket s; private final static int PORT =2002; private InputStreamReader isr; private OutputStreamWriter osw; private boolean estaBien; /** * Constructor por defecto */ public TcpC() { estaBien = true; try { init(InetAddress.getLocalHost()); } catch (UnknownHostException uhe) { System.err.print("TcpC.<init> falló: " + uhe); System.err.println(" para locahost"); estaBien = false; } } /** * * * Constructor para servidor específico @param servidor nombre del servidor Página 18 de 39 TCP/IP Protocolos, Sockets, Exposición */ public TcpC(String servidor) { estaBien = true; try { init(InetAddress.getByName(servidor)); } catch (UnknownHostException uhe) { System.err.print("TcpC.<init> falló: " + uhe); System.err.println(" para " + servidor); estaBien = false; } } /** * iniciador común llamado por constructores * * @param ia objeto con dirección del servidor */ private void init(InetAddress ia) { try { s = new Socket(ia, PORT); isr = new InputStreamReader(s.getInputStream()); osw = new OutputStreamWriter(s.getOutputStream()); } catch (IOException ioe) { System.err.println("TcpC.init falló: " + ioe); estaBien = false; } } /** * cerrar el socket */ private void close() throws IOException { s.close(); } /** * estado interno de la clase * @return "false" en caso de error interno */ public boolean estaBien() { return estaBien; } /** * manda datos al servidor * @param s linea de datos */ public void pregunta(String s) throws IOException { if (!estaBien) Página 19 de 39 TCP/IP Protocolos, Sockets, Exposición return; osw.write(s); osw.flush(); } /** * recibir datos del servidor * @return linea de datos */ public String respuesta() throws IOException { if (!estaBien) return null; char[] buf = new char[256]; isr.read(buf, 0, 255); String temp = new String(buf); return temp; } public static void main(String[] av) { TcpC c; if (av.length > 0) c = new TcpC(av[0]); else c = new TcpC(); if (!c.estaBien()) return; String pr; if (av.length > 1) pr = av[1]; else pr = "¿que es esto?"; try { c.pregunta(pr); System.out.println("mandamos: " + pr); System.out.println("recibimos: " + c.respuesta()); c.close(); } catch (IOException ioe) { System.err.println("TcpC.main falló: " + ioe); } } } TERMINA CODIGO FUENTE DEL CLIENTE Página 20 de 39 TCP/IP Protocolos, Sockets, Exposición II.III.- Codigo Fuente del Servidor. CODIGO FUENTE DEL SERVIDOR import java.io.*; import java.net.*; /** * clase para demostrar el uso de stream sockets en Java * * Servidor TCP */ class TcpS { private ServerSocket s; private final static int PORT = 2002; private boolean estaBien; /** * Constructor por defecto */ public TcpS() { estaBien = true; try { s = new ServerSocket(PORT); System.out.print("ip local es " + s.getInetAddress().getHostAddress()); System.out.println(", puerto " + s.getLocalPort()); } catch (IOException ioe) { System.err.println("TcpS.init falló: " + ioe); estaBien = false; } } /** * cerrar el socket principal */ private void close() throws IOException { s.close(); } /** * * */ reportar estado interno @return "false" en caso de error interno Página 21 de 39 TCP/IP Protocolos, Sockets, Exposición public boolean estaBien() { return estaBien; } /** * aqui se aceptan y procesan conexiones nuevas */ public void procesar() { for(;;) { try { Socket cliente = s.accept(); System.err.print(cliente.getInetAddress().getHostAddress()); System.err.println(" nos llama"); InputStreamReader isr = new InputStreamReader(cliente.getInputStream()); OutputStreamWriter osw = new OutputStreamWriter(cliente.getOutputStream()); String pregunta = pregunta(isr); respuesta(invertir(pregunta), osw); isr.close(); osw.close(); cliente.close(); } catch (IOException ioe) { System.err.println("TcpS.procesar falló: " + ioe); } } } /** * recibir datos del cliente * @param isr linea de comunicación con el cliente * @return linea con datos */ public String pregunta(InputStreamReader isr) throws IOException { if (!estaBien) return null; char[] buf = new char[256]; int sz = isr.read(buf, 0, 255); String temp = new String(buf, 0, sz); System.out.println("pregunta: " + temp.length() + " bytes"); return temp; } /** * mandar datos al cliente Página 22 de 39 TCP/IP Protocolos, Sockets, Exposición * * @param s linea con datos * @param osw linea de comunicación con el cliente */ public void respuesta(String s, OutputStreamWriter osw) throws IOException { if (!estaBien) return; osw.write(s); osw.flush(); System.out.println("respuesta: " + s.length() + " bytes"); } /** * invertir una linea usando recursion * * @param s linea a invertir * @result linea invertida */ public String invertir(String s) { if (s.length() > 1) { char l = s.charAt(0); return invertir(s.substring(1)) + l; } else return s; } public static void main(String[] av) { TcpS c = new TcpS(); if (!c.estaBien()) return; try { c.procesar(); c.close(); // formalismo, nunca se llega } catch (IOException ioe) { System.err.println("TcpS.main falló: " + ioe); } } } CODIGO FUENTE DEL SERVIDOR Página 23 de 39 TCP/IP Protocolos, Sockets, Exposición III.- Expocision del Avance del Proyecto Win 2000. Diapositiva 1 Protocolo TCP/IP En Windows 2000 Diapositiva 2 ARQUITECTURA DE SOCKETS EN WINDOWS 2000 SERVER Página 24 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 3 TCP/IP • Relación del modelo TCP/IP con el modelo OSI Diapositiva 4 TCP/IP • Modelo de capas de TCP/IP FTP, SMTP, TELNET SNMP, X-WINDOWS, RPC, NFS TCP UDP IP, ICMP, 802.2, X.25 ETHERNET, IEEE 802.2, X.25 Página 25 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 5 TCP/IP • FTP (File Transfer Protocol). Se utiliza para transferencia de archivos. • SMTP (Simple Mail Transfer Protocol). Protocol). Es una aplicació aplicación para el correo electró electrónico. • TELNET: Permite la conexió conexión a una aplicació aplicación remota desde un proceso o terminal. • RPC (Remote Procedure Call). Permite llamadas a procedimientos • • • situados remotamente. Se utilizan las llamadas a RPC como si fuesen fuesen procedimientos locales. SNMP (Simple Network Management Protocol). Se trata de una aplicació aplicación para el control de la red. NFS (Network File System). Permite la utilizació utilización de archivos distribuidos por los programas de la red. X-Windows. Windows. Es un protocolo para el manejo de ventanas e interfaces de usuario. Diapositiva 6 Protocolos de aplicación • La arquitectura abierta de TCP/IP permite construir sobre él protocolos de aplicación de muy diversa índole y funcionalidad, muchos de los cuales son estándares muy conocidos Página 26 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 7 Protocolos de aplicación • En Windows 2000 es posible encontrar unngran variedad de protocolocos y ademas compatibles con otras plataformas. • Ejemplos: Diapositiva 8 Protocolos de aplicación • Para RAS – – – – CHAP MSMS-CHAP PAP SPA • Configuracion dinamica – DHCP • De intercambio de paquetes entre redes – IPX/SPX Página 27 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 9 Protocolos de aplicación • FTP:Es FTP:Es el mas utilizado de todos los protocolos de aplicación y de los mas antiguos. • HTTP: HTTP: Se utiliza para manejar la consulta de hipertexto y el acceso de datos con www. www. • NFS: NFS: Autoriza a los usuarios el acceso en línea a archivos que se encuentran en sistemas remotos. La mayoría de trafico en NFS es un caso especial del protocolo RPC. • RPC: Es una llamada a un procedimiento que se ejecuta en un sistema diferente del que realiza la llamada. • SMPT: Protocolo de correo electrónico. Diapositiva 10 Protocolos de aplicación • SNMP: Administra los sistemas de forma remota, también supervisa el trafico de red. • NTP: Sicroniza servidores • TELNET: Permite que un usuario desde una terminal acceda a recursos y aplicaciones de otros computadores. • TFTP: Destinado a la transferencia de archivos sin permitir tanta iteraccion entre clienteservidor como la que existe en FTP. Página 28 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 11 Conclusión • El conjunto de protocolos TCP/IP ha sido de vital importancia para el desarrollo de las redes de comunicación, sobre todo para Internet. El ritmo de expansión de Internet también es una consecuencia de estos protocolos, sin los cuales, conectar redes de distintas naturalezas (diferente Hardware, sistema operativo, etc..), hubiera sido mucho mas difícil, por no decir imposible. Así pues, podemos decir que los protocolos TCP/IP fueron y son el motor necesario para que las redes en general, e Internet en particular, se mejoren y se pueda lograr una buena "autopista de la información". Diapositiva 12 Referencias /~al019803/Tcpip.htm Tcpip.htm • http://www4.uji.es http://www4.uji.es/~al019803/ html • http://usuarios.lycos.es http://usuarios.lycos.es//janjo/janjo1. janjo/janjo1.html www.undersec.com/ / sjfproject/ / • http://www.undersec.com http:// sjfproject prog/ prog/ sockets/ sockets/sockets.htm#241 • Windows 2000 SeverSever-Prentice Hall – Serie práctica Página 29 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 13 Sockets Diapositiva 14 Comparación entre el Modelo OSI y Equivalente en Sockets Página 30 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 15 Diapositiva 16 Tipos de SOCKETS Los tipos disponibles son los siguientes: •Tipo SOCK_DGRAM: sockets para comunicaciones en modo no conectado ,con envío de datagramas de tamaño limitado ( tipo telegrama ). En dominios Internet el protocolo del nivel de transporte sobre el que se basa es el UDP. •Tipo SOCK_STREAM: para comunicaciones fiables en modo conectado, dedos vías y con tamaño variable de los mensajes de datos. En dominios Internet subyace el protocolo TCP. •Tipo SOCK_RAW: permite el acceso a protocolos de más bajo nivel como el IP ( nivel de red ) * Tipo SOCK_SEQPACKET: tiene las características del SOCK_STREAM pero además el tamaño de los mensajes es fijo. Página 31 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 17 MODELO DE COMUNICACIONES CON JAVA En Java, crear una conexión socket TCP/IP se realiza directamente con el paquete java.net. A continuación mostramos un diagrama de lo que ocurre en el lado del cliente y del servidor: Diapositiva 18 SOCKETS Comparación con PIPES Página 32 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 19 Diapositiva 20 SOCKETS Los sockets son mecanismos de comunicación entre procesos que permiten que un proceso hable ( emita o reciba información ) con otro proceso incluso estando en distintas máquinas. Un socket es al sistema de comunicación entre ordenadores lo que un buzón o un teléfono es al sistema de comunicación entre personas: un punto de comunicación entre dos agentes ( procesos o personasrespectivamente ) por el cual se puede emitir o recibir información. La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar Archivos. Se podrá realizar redirecciones de los archivos de E/S estándar (descriptores 0,1 y 2) a los sockets y así combinar entre ellos aplicaciones de la red. Todo nuevo proceso creado heredará, por tanto, los descriptores de sockets de su padre. Página 33 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 21 SOCKETS La comunicación entre procesos a través de sockets se basa en la filosofía CLIENTE-SERVIDOR: Un proceso en esta comunicación actuará de proceso servidor creando un socket cuyo nombre conocerá el proceso cliente, que podrá "hablar" con el proceso servidor a través de la conexión con dicho socket. El otro proceso actuará como cliente creando un socket sin nombre cuyo descriptor usará para leer o escribir. El enlace entre los dos sockets permite una comunicación bidireccional,característica propia de los sockets y que los diferencia de los pipes, o canales de comunicación unidireccional entre procesos de una misma máquina. Diapositiva 22 SOCKETS El mecanismo de comunicación vía sockets tiene los siguientes pasos: 1º) El proceso servidor crea un socket con nombre y espera la conexión. 2º) El proceso cliente crea un socket sin nombre. 3º) El proceso cliente realiza una petición de conexión al socket servidor. 4º) El cliente realiza la conexión a través de su socket mientras el proceso servidor mantiene el socket servidor original con nombre. Página 34 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 23 SOCKETS Es muy común en este tipo de comunicación lanzar un proceso hijo, una vez realizada la conexión, que se ocupe del intercambio de información con el proceso cliente mientras el proceso padre servidor sigue aceptando conexiones. *Todo socket viene definido por dos características fundamentales: -El tipo del socket, que indica la naturaleza del mismo, el tipo de comunicación que puede generarse entre los sockets. -El dominio del socket especifica el conjunto de sockets que puedenestablecer una comunicación con el mismo. Diapositiva 24 Tipos de SOCKETS Define las propiedades de las comunicaciones en las que se ve envuelto un socket, esto es, el tipo de comunicación que se puede dar entre cliente y servidor. Estas pueden ser: - Fiabilidad de transmisión. - Mantenimiento del orden de los datos. - No duplicación de los datos. - El "Modo Conectado" en la comunicación. - Envío de mensajes urgentes Página 35 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 25 Implementación de un Cliente en Java Si estamos programando un cliente, el socket se abre de la forma: Socket Cliente; Cliente = new Socket( "maquina",numeroPuerto ); Diapositiva 26 En el ejemplo anterior no se usan excepciones; sin embargo, es una gran idea la captura de excepciones cuando se está trabajando con sockets. El mismo ejemplo quedaría como: Socket miCliente; try { miCliente = new Socket( "maquina",numeroPuerto ); } catch( IOException e ) { System.out.println( e ); } Si estamos programando un servidor, la forma de apertura del socket es la que muestra el siguiente ejemplo: Socket miServicio; try { miServicio = new ServerSocket( numeroPuerto ); } catch( IOException e ) { System.out.println( e ); } Página 36 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 27 A la hora de la implementación de un servidor también necesitamos crear un objeto socket desde el ServerSocket para que esté atento a las conexiones que le puedan realizar clientes potenciales y poder aceptar esas conexiones: Socket socketServicio = null; try { socketServicio = miServicio.accept(); } catch( IOException e ) { System.out.println( e ); } Diapositiva 28 Creación de Streams de Entrada En la parte cliente de la aplicación, se puede utilizar la clase DataInputStream para crear un stream de entrada que esté listo a recibir todas las respuestas que el servidor le envíe. DataInputStream entrada; try { entrada = new DataInputStream( miCliente.getInputStream() ); } catch( IOException e ) { System.out.println( e ); } La clase DataInputStream permite la lectura de líneas de texto y tipos de datos primitivos de Java de un modo altamente portable; dispone de métodos para leer todos esos tipos como: read(), readChar(), readInt(), readDouble() y readLine(). Deberemos utilizar la función que creamos necesaria dependiendo del tipo de dato que esperemos recibir del servidor. En el lado del servidor, también usaremos DataInputStream, pero en este caso para recibir las entradas que se produzcan de los clientes que se hayan conectado: DataInputStream entrada; try { entrada = new DataInputStream( socketServicio.getInputStream() ); } catch( IOException e ) { System.out.println( e ); } Página 37 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 29 Creación de Streams de Salida En el lado del cliente, podemos crear un stream de salida para enviar información al socket del servidor utilizando las clases PrintStream o DataOutputStream: PrintStream salida; try { salida = new PrintStream( miCliente.getOutputStream() ); } catch( IOException e ) { System.out.println( e ); } La clase PrintStream tiene métodos para la representación textual de todos los datos primitivos de Java. Sus métodos write y println() tienen una especial importancia en este aspecto. No obstante, para el envío de información al servidor también podemos utilizar DataOutputStream: DataOutputStream salida; try { salida = new DataOutputStream( miCliente.getOutputStream() ); } catch( IOException e ) { System.out.println( e ); } Diapositiva 30 La clase DataOutputStream permite escribir cualquiera de los tipos primitivos de Java, muchos de sus métodos escriben un tipo de dato primitivo en el stream de salida. De todos esos métodos, el más útil quizás sea writeBytes(). En el lado del servidor, podemos utilizar la clase PrintStream para enviar información al cliente: PrintStream salida; try { salida = new PrintStream( socketServicio.getOutputStream() ); } catch( IOException e ) { System.out.println( e ); } Pero también podemos utilizar la clase DataOutputStream como en el caso de envío de información desde el cliente. Página 38 de 39 TCP/IP Protocolos, Sockets, Exposición Diapositiva 31 Cierre de Sockets Siempre deberemos cerrar los canales de entrada y salida que se hayan abierto durante la ejecución de la aplicación. En la parte del cliente: try { salida.close(); entrada.close(); miCliente.close(); } catch( IOException e ) { System.out.println( e ); } Y en la parte del servidor: try { salida.close(); entrada.close(); socketServicio.close(); miServicio.close(); } catch( IOException e ) { System.out.println( e ); } Página 39 de 39