Este documento describe una práctica sobre la intercomunicación con sockets en Java. El objetivo es medir el tiempo de llamadas a un servidor local, UDP y TCP tanto en el mismo nodo como en nodos distintos. Se debe implementar un cliente simple que realice llamadas al servidor y medir los tiempos, usando tres tipos de servidores. Se proporciona el código de un servidor de ejemplo para UDP y TCP.
Sistemas Distribuidos y Paralelismo - Unidad 2ingnucious
Este documento habla sobre los sistemas distribuidos y paralelos, específicamente sobre el pasaje de mensajes. Explica las características del pasaje de mensajes, la máquina virtual paralela PVM, y provee ejemplos de cómo usar PVM para la creación de procesos, el envío y recepción de mensajes, y la comunicación entre grupos de procesos.
Este documento presenta los conceptos básicos de la programación modular y los subprogramas. Explica que la programación modular divide un programa en módulos independientes que realizan tareas específicas. Luego describe los diferentes tipos de subprogramas como procedimientos, funciones y sus características como parámetros, ámbitos y la forma de invocarlos y definirlos. Finalmente, incluye ejemplos para ilustrar el uso de subprogramas.
Este documento describe la comunicación en sistemas distribuidos, incluyendo la llamada a procedimiento remoto (RPC) que permite a un cliente invocar procedimientos en otro espacio de direccionamiento de forma transparente. Explica los conceptos clave de RPC como el paso de parámetros, la especificación de interfaz, y el enlace dinámico que permite al cliente localizar el servidor. También analiza la semántica de RPC en presencia de fallos como la pérdida de mensajes o caídas del cliente o servidor.
Este documento presenta una serie de ejercicios y temas relacionados con programación en Java para ser resueltos por un estudiante. Se incluyen instrucciones detalladas para crear clases, métodos, interfaces gráficas y manejar excepciones. El objetivo final es desarrollar una aplicación que simule un sistema de inventario con un cliente y servidor que se comuniquen a través de una red.
Este documento presenta un tutorial de C++ dividido en 23 capítulos. El tutorial utiliza ejemplos sencillos de código para explicar conceptos básicos como funciones, tipos de datos, clases, herencia, entre otros. Cada capítulo contiene uno o más fragmentos de código con comentarios que describen su funcionalidad. El objetivo del tutorial es servir como referencia rápida para aprender los fundamentos del lenguaje C++.
Este documento describe el proceso de configurar un clúster con MPICH2 en Ubuntu para ejecutar de forma paralela un algoritmo de ordenamiento de burbuja sobre un arreglo. Se explican los pasos para instalar las herramientas necesarias como NFS, SSH y MPICH2 en los nodos maestro y esclavos. Luego se compila y ejecuta una aplicación de prueba para validar la configuración, y finalmente se implementa y prueba el algoritmo de ordenamiento paralelo, comparando los tiempos de ejecución secuencial y
Compilador sobre conversión de unidadesDiego Guaman
Este documento describe la construcción de un compilador que realiza conversiones entre unidades de longitud y volumen. Explica el caso de estudio, el autómata correspondiente, y los componentes del compilador como el analizador léxico basado en JFlex y el analizador sintáctico y semántico basado en CUP. También cubre la detección de errores y presenta resultados y el código fuente del compilador.
Este documento presenta una introducción al lenguaje de programación C++ a través de ejemplos. Explica conceptos básicos como entrada y salida, variables, condicionales y bucles. Muestra programas sencillos que ilustran cómo escribir cadenas de texto, realizar cálculos y tomar decisiones en función de las entradas del usuario.
Sistemas Distribuidos y Paralelismo - Unidad 2ingnucious
Este documento habla sobre los sistemas distribuidos y paralelos, específicamente sobre el pasaje de mensajes. Explica las características del pasaje de mensajes, la máquina virtual paralela PVM, y provee ejemplos de cómo usar PVM para la creación de procesos, el envío y recepción de mensajes, y la comunicación entre grupos de procesos.
Este documento presenta los conceptos básicos de la programación modular y los subprogramas. Explica que la programación modular divide un programa en módulos independientes que realizan tareas específicas. Luego describe los diferentes tipos de subprogramas como procedimientos, funciones y sus características como parámetros, ámbitos y la forma de invocarlos y definirlos. Finalmente, incluye ejemplos para ilustrar el uso de subprogramas.
Este documento describe la comunicación en sistemas distribuidos, incluyendo la llamada a procedimiento remoto (RPC) que permite a un cliente invocar procedimientos en otro espacio de direccionamiento de forma transparente. Explica los conceptos clave de RPC como el paso de parámetros, la especificación de interfaz, y el enlace dinámico que permite al cliente localizar el servidor. También analiza la semántica de RPC en presencia de fallos como la pérdida de mensajes o caídas del cliente o servidor.
Este documento presenta una serie de ejercicios y temas relacionados con programación en Java para ser resueltos por un estudiante. Se incluyen instrucciones detalladas para crear clases, métodos, interfaces gráficas y manejar excepciones. El objetivo final es desarrollar una aplicación que simule un sistema de inventario con un cliente y servidor que se comuniquen a través de una red.
Este documento presenta un tutorial de C++ dividido en 23 capítulos. El tutorial utiliza ejemplos sencillos de código para explicar conceptos básicos como funciones, tipos de datos, clases, herencia, entre otros. Cada capítulo contiene uno o más fragmentos de código con comentarios que describen su funcionalidad. El objetivo del tutorial es servir como referencia rápida para aprender los fundamentos del lenguaje C++.
Este documento describe el proceso de configurar un clúster con MPICH2 en Ubuntu para ejecutar de forma paralela un algoritmo de ordenamiento de burbuja sobre un arreglo. Se explican los pasos para instalar las herramientas necesarias como NFS, SSH y MPICH2 en los nodos maestro y esclavos. Luego se compila y ejecuta una aplicación de prueba para validar la configuración, y finalmente se implementa y prueba el algoritmo de ordenamiento paralelo, comparando los tiempos de ejecución secuencial y
Compilador sobre conversión de unidadesDiego Guaman
Este documento describe la construcción de un compilador que realiza conversiones entre unidades de longitud y volumen. Explica el caso de estudio, el autómata correspondiente, y los componentes del compilador como el analizador léxico basado en JFlex y el analizador sintáctico y semántico basado en CUP. También cubre la detección de errores y presenta resultados y el código fuente del compilador.
Este documento presenta una introducción al lenguaje de programación C++ a través de ejemplos. Explica conceptos básicos como entrada y salida, variables, condicionales y bucles. Muestra programas sencillos que ilustran cómo escribir cadenas de texto, realizar cálculos y tomar decisiones en función de las entradas del usuario.
Este documento presenta información sobre técnicas de bases de datos NoSQL como la disponibilidad, el consenso, la partición y la replicación. Explica el modelo de ordenación con marcas de tiempo multiversión MVCC de Reed, incluyendo cómo se manejan las lecturas y escrituras. También cubre algoritmos de elección como el anillo y el matón, y protocolos de consenso como Paxos, incluyendo sus roles, fases y propiedades. Por último, revisa modelos de replicación como el síncrono, asíncrono, copia primaria
Este documento proporciona una introducción a C# y .NET, incluyendo definiciones de conceptos clave como namespaces, clases, eventos, constructores y master pages. También describe cómo crear una primera clase "Hola Mundo" y agregar clases a un sitio web. Finalmente, explica cómo las master pages definen elementos comunes que heredan las páginas de contenido asociadas a través de content placeholders.
El documento describe las interfaces y clases necesarias para crear un programa que dibuje figuras geométricas. Define las interfaces Figura y FiguraCerrada que especifican los métodos requeridos para calcular longitud, área y dibujar figuras. También describe las clases Circunferencia, CircunferenciaRellena y VentanaDeDibujo que implementan estas interfaces, y la clase LanzaPrac3 que crea la ventana principal. Se pide implementar nuevas clases Linea y Trapecio, y añadir un menú a LanzaPrac3 para seleccionar
Este documento presenta una introducción al lenguaje de programación C++. Explica la estructura básica de un programa en C++, incluyendo la función principal, librerías estándar, tipos de datos y sentencias de control de flujo. También cubre temas como variables, funciones, estructuras de datos, arreglos, apuntadores y manejo de memoria dinámica. El documento proporciona ejemplos para ilustrar los conceptos básicos de C++.
El documento describe el lenguaje de programación C. Explica que C fue creado en los años 70 y es un lenguaje estructurado pero no por bloques. Describe los tipos de datos básicos en C como enteros, caracteres y números de punto flotante, así como las palabras reservadas del lenguaje.
Este documento presenta conceptos fundamentales sobre sistemas distribuidos, incluyendo:
1) Se define un modelo de sistema distribuido como un sistema de transición de estados compuesto por nodos con procesos secuenciales y canales de comunicación.
2) Se describen diferentes técnicas para ordenar eventos en sistemas distribuidos como relaciones causales, relojes lógicos de Lamport y relojes vectoriales.
3) Se explican algoritmos para sincronizar relojes físicos como los de Christian y Berkeley para lograr consistencia en ausencia
Este documento habla sobre cómo sobrecargar operadores en C# para tipos personalizados como clases y estructuras. Explica que si queremos usar operadores como suma en nuestros propios tipos, debemos enseñarle al compilador cómo realizar esas operaciones mediante la sobrecarga de operadores. Además, muestra un ejemplo de cómo sobrecargar el operador de suma para una estructura llamada Punto que representa coordenadas.
El documento presenta diferentes técnicas para el control de concurrencia en bases de datos NoSQL, incluyendo exclusion mutua distribuida, bloqueos, control optimista de concurrencia y ordenación por marcas de tiempo. Explica algoritmos como Ricart-Agrawala y Maekawa para exclusión mutua distribuida, y el uso de marcas de tiempo multiversión (MVCC) para permitir lecturas concurrentes sin bloqueos. También cubre elección de líderes mediante algoritmos basados en anillos ante la caída del coordinador.
Este documento presenta una introducción a la programación orientada a objetos en Visual Basic.NET. Explica conceptos básicos como variables, operadores, estructuras de control, clases y objetos. Detalla la sintaxis de VB.NET para definir variables, arreglos, sentencias condicionales y de control de flujo. También describe cómo crear clases, métodos, constructores, sobrecargas y excepciones en este lenguaje.
El siguiente compilador lo que va a resolver es la conversión de números enteros a binarios, para que se realice la operación se deberá ingresar el número a convertir seguido de la palabra reservada convertir, por ejemplo: 256 convertir.
Este documento describe diferentes tipos de librerías en Java, incluidas java.lang, java.io, java.net, java.util y java.awt. También cubre conceptos básicos como identificadores, literales, comentarios, palabras clave y separadores.
C# es un lenguaje sencillo que elimina elementos innecesarios de otros lenguajes como C++. Es un lenguaje orientado a objetos moderno que incorpora características útiles como tipos decimales y cadenas. C# también es seguro a través de comprobaciones de tipos, gestiona automáticamente la memoria y permite la extensibilidad y compatibilidad con otros lenguajes.
Este documento presenta una introducción al lenguaje de programación C#. Explica que C# es un lenguaje orientado a objetos moderno y potente desarrollado por Microsoft que se usa principalmente para crear aplicaciones .NET. También describe brevemente algunos conceptos clave de C# como su sintaxis, tipos, gestión de memoria, excepciones, paradigmas de programación y dominios de aplicación.
Este documento describe diferentes enfoques para escribir clases contenedoras que exponen funciones de bibliotecas nativas en Java. Explica el enfoque de uno-a-uno, donde cada función nativa se mapea a un método nativo único. Luego introduce el concepto de "stubs compartidas", donde una función stub distribuye llamadas a otras funciones nativas, simplificando la tarea de escribir clases contenedoras. Finalmente, discute las ventajas e inconvenientes de ambos enfoques.
Este documento describe varios comandos y opciones utilizados en Java. Explica comandos como -XDEBUG para depurar código, -CLASSPATH para establecer la ruta de búsqueda de clases, y -JAR para ejecutar programas empaquetados en archivos JAR. También cubre opciones como -XMX/-XMS para establecer el tamaño máximo/mínimo de memoria, y -XNOASYNCGC para desactivar el recolector de basura asíncrono. Finalmente, menciona comandos como JFRAME para crear
El documento describe el lenguaje de programación C. C fue creado a mediados de los años 70 y es un lenguaje estructurado pero no por bloques. El lenguaje proporciona flexibilidad pero deja la responsabilidad de comprobaciones al programador. C consta de funciones, con la función main ejecutándose primero.
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...Arazelii Puentez
Java es un lenguaje de programación orientado a objetos diseñado para ser independiente de la plataforma, lo que permite que el código escrito en Java se ejecute en cualquier dispositivo. Originalmente fue desarrollado por James Gosling en Sun Microsystems. El código fuente Java se compila a bytecode que es ejecutado por la máquina virtual Java en cualquier sistema, independientemente de la arquitectura subyacente.
Java es un lenguaje de programación orientado a objetos diseñado para ser independiente de la plataforma. Se compila a bytecode que puede ejecutarse en cualquier máquina virtual Java sin importar la arquitectura subyacente, permitiendo "escribir una vez y ejecutar en cualquier lugar". Originalmente fue desarrollado por James Gosling en Sun Microsystems y se ha convertido en uno de los lenguajes más populares, particularmente para aplicaciones web de cliente-servidor.
El documento habla sobre la programación y los lenguajes de programación. Explica que la programación es el proceso de crear programas de computadora usando lenguajes de programación. Luego describe los diferentes tipos de lenguajes de programación como lenguajes de alto nivel, lenguajes de bajo nivel y lenguajes máquina, y proporciona ejemplos de cada uno.
Este documento describe las diferentes fases del proceso de programación, incluyendo la fase de modelado, la fase de tipos de datos abstractos (TDA), y la fase de estructuras de datos. Explica el concepto de TDA, incluyendo su definición, dominio, especificación sintáctica y semántica. También describe cómo los programadores pueden utilizar TDA al resolver problemas.
Este documento describe la comunicación en sistemas distribuidos, incluyendo la llamada a procedimiento remoto (RPC), el paso de parámetros, la especificación de interfaz, el enlace dinámico y la semántica RPC en presencia de fallos. La RPC permite que un cliente invoque procedimientos en servidores remotos de forma transparente, empaquetando los parámetros y devolviendo los resultados. Los servidores exportan su interfaz a un enlazador que proporciona la dirección del servidor al cliente. La RPC intenta ocultar los erro
Este documento presenta información sobre técnicas de bases de datos NoSQL como la disponibilidad, el consenso, la partición y la replicación. Explica el modelo de ordenación con marcas de tiempo multiversión MVCC de Reed, incluyendo cómo se manejan las lecturas y escrituras. También cubre algoritmos de elección como el anillo y el matón, y protocolos de consenso como Paxos, incluyendo sus roles, fases y propiedades. Por último, revisa modelos de replicación como el síncrono, asíncrono, copia primaria
Este documento proporciona una introducción a C# y .NET, incluyendo definiciones de conceptos clave como namespaces, clases, eventos, constructores y master pages. También describe cómo crear una primera clase "Hola Mundo" y agregar clases a un sitio web. Finalmente, explica cómo las master pages definen elementos comunes que heredan las páginas de contenido asociadas a través de content placeholders.
El documento describe las interfaces y clases necesarias para crear un programa que dibuje figuras geométricas. Define las interfaces Figura y FiguraCerrada que especifican los métodos requeridos para calcular longitud, área y dibujar figuras. También describe las clases Circunferencia, CircunferenciaRellena y VentanaDeDibujo que implementan estas interfaces, y la clase LanzaPrac3 que crea la ventana principal. Se pide implementar nuevas clases Linea y Trapecio, y añadir un menú a LanzaPrac3 para seleccionar
Este documento presenta una introducción al lenguaje de programación C++. Explica la estructura básica de un programa en C++, incluyendo la función principal, librerías estándar, tipos de datos y sentencias de control de flujo. También cubre temas como variables, funciones, estructuras de datos, arreglos, apuntadores y manejo de memoria dinámica. El documento proporciona ejemplos para ilustrar los conceptos básicos de C++.
El documento describe el lenguaje de programación C. Explica que C fue creado en los años 70 y es un lenguaje estructurado pero no por bloques. Describe los tipos de datos básicos en C como enteros, caracteres y números de punto flotante, así como las palabras reservadas del lenguaje.
Este documento presenta conceptos fundamentales sobre sistemas distribuidos, incluyendo:
1) Se define un modelo de sistema distribuido como un sistema de transición de estados compuesto por nodos con procesos secuenciales y canales de comunicación.
2) Se describen diferentes técnicas para ordenar eventos en sistemas distribuidos como relaciones causales, relojes lógicos de Lamport y relojes vectoriales.
3) Se explican algoritmos para sincronizar relojes físicos como los de Christian y Berkeley para lograr consistencia en ausencia
Este documento habla sobre cómo sobrecargar operadores en C# para tipos personalizados como clases y estructuras. Explica que si queremos usar operadores como suma en nuestros propios tipos, debemos enseñarle al compilador cómo realizar esas operaciones mediante la sobrecarga de operadores. Además, muestra un ejemplo de cómo sobrecargar el operador de suma para una estructura llamada Punto que representa coordenadas.
El documento presenta diferentes técnicas para el control de concurrencia en bases de datos NoSQL, incluyendo exclusion mutua distribuida, bloqueos, control optimista de concurrencia y ordenación por marcas de tiempo. Explica algoritmos como Ricart-Agrawala y Maekawa para exclusión mutua distribuida, y el uso de marcas de tiempo multiversión (MVCC) para permitir lecturas concurrentes sin bloqueos. También cubre elección de líderes mediante algoritmos basados en anillos ante la caída del coordinador.
Este documento presenta una introducción a la programación orientada a objetos en Visual Basic.NET. Explica conceptos básicos como variables, operadores, estructuras de control, clases y objetos. Detalla la sintaxis de VB.NET para definir variables, arreglos, sentencias condicionales y de control de flujo. También describe cómo crear clases, métodos, constructores, sobrecargas y excepciones en este lenguaje.
El siguiente compilador lo que va a resolver es la conversión de números enteros a binarios, para que se realice la operación se deberá ingresar el número a convertir seguido de la palabra reservada convertir, por ejemplo: 256 convertir.
Este documento describe diferentes tipos de librerías en Java, incluidas java.lang, java.io, java.net, java.util y java.awt. También cubre conceptos básicos como identificadores, literales, comentarios, palabras clave y separadores.
C# es un lenguaje sencillo que elimina elementos innecesarios de otros lenguajes como C++. Es un lenguaje orientado a objetos moderno que incorpora características útiles como tipos decimales y cadenas. C# también es seguro a través de comprobaciones de tipos, gestiona automáticamente la memoria y permite la extensibilidad y compatibilidad con otros lenguajes.
Este documento presenta una introducción al lenguaje de programación C#. Explica que C# es un lenguaje orientado a objetos moderno y potente desarrollado por Microsoft que se usa principalmente para crear aplicaciones .NET. También describe brevemente algunos conceptos clave de C# como su sintaxis, tipos, gestión de memoria, excepciones, paradigmas de programación y dominios de aplicación.
Este documento describe diferentes enfoques para escribir clases contenedoras que exponen funciones de bibliotecas nativas en Java. Explica el enfoque de uno-a-uno, donde cada función nativa se mapea a un método nativo único. Luego introduce el concepto de "stubs compartidas", donde una función stub distribuye llamadas a otras funciones nativas, simplificando la tarea de escribir clases contenedoras. Finalmente, discute las ventajas e inconvenientes de ambos enfoques.
Este documento describe varios comandos y opciones utilizados en Java. Explica comandos como -XDEBUG para depurar código, -CLASSPATH para establecer la ruta de búsqueda de clases, y -JAR para ejecutar programas empaquetados en archivos JAR. También cubre opciones como -XMX/-XMS para establecer el tamaño máximo/mínimo de memoria, y -XNOASYNCGC para desactivar el recolector de basura asíncrono. Finalmente, menciona comandos como JFRAME para crear
El documento describe el lenguaje de programación C. C fue creado a mediados de los años 70 y es un lenguaje estructurado pero no por bloques. El lenguaje proporciona flexibilidad pero deja la responsabilidad de comprobaciones al programador. C consta de funciones, con la función main ejecutándose primero.
investigación de Comandos, Sentencias y/o Paquetes del Lenguaje de Programaci...Arazelii Puentez
Java es un lenguaje de programación orientado a objetos diseñado para ser independiente de la plataforma, lo que permite que el código escrito en Java se ejecute en cualquier dispositivo. Originalmente fue desarrollado por James Gosling en Sun Microsystems. El código fuente Java se compila a bytecode que es ejecutado por la máquina virtual Java en cualquier sistema, independientemente de la arquitectura subyacente.
Java es un lenguaje de programación orientado a objetos diseñado para ser independiente de la plataforma. Se compila a bytecode que puede ejecutarse en cualquier máquina virtual Java sin importar la arquitectura subyacente, permitiendo "escribir una vez y ejecutar en cualquier lugar". Originalmente fue desarrollado por James Gosling en Sun Microsystems y se ha convertido en uno de los lenguajes más populares, particularmente para aplicaciones web de cliente-servidor.
El documento habla sobre la programación y los lenguajes de programación. Explica que la programación es el proceso de crear programas de computadora usando lenguajes de programación. Luego describe los diferentes tipos de lenguajes de programación como lenguajes de alto nivel, lenguajes de bajo nivel y lenguajes máquina, y proporciona ejemplos de cada uno.
Este documento describe las diferentes fases del proceso de programación, incluyendo la fase de modelado, la fase de tipos de datos abstractos (TDA), y la fase de estructuras de datos. Explica el concepto de TDA, incluyendo su definición, dominio, especificación sintáctica y semántica. También describe cómo los programadores pueden utilizar TDA al resolver problemas.
Este documento describe la comunicación en sistemas distribuidos, incluyendo la llamada a procedimiento remoto (RPC), el paso de parámetros, la especificación de interfaz, el enlace dinámico y la semántica RPC en presencia de fallos. La RPC permite que un cliente invoque procedimientos en servidores remotos de forma transparente, empaquetando los parámetros y devolviendo los resultados. Los servidores exportan su interfaz a un enlazador que proporciona la dirección del servidor al cliente. La RPC intenta ocultar los erro
1) El documento describe una práctica para implementar comunicación entre un cliente y servidor utilizando sockets en Java. 2) Se implementan tres tipos de servidores: local, UDP y TCP, y el cliente mide el tiempo de llamada para cada uno. 3) El cliente y servidores se comunican enviando y recibiendo números enteros a través de sockets.
El documento describe los pasos para crear un servidor y cliente en C utilizando sockets. Para el servidor, los pasos son: 1) abrir un socket, 2) vincularlo a un número de puerto, 3) escuchar conexiones entrantes, 4) aceptar una conexión de un cliente, y 5) comunicarse con el cliente mediante lectura y escritura antes de cerrar la conexión. Para el cliente, los pasos son: 1) abrir un socket, 2) conectarse al servidor, y 3) comunicarse con el servidor antes de cerrar la conex
Este documento trata sobre la programación cliente-servidor en Java. Explica conceptos como la arquitectura cliente-servidor, sockets, ejemplos de código cliente-servidor, servlets y la arquitectura de tres capas. También introduce conceptos como thin clients y el uso de JDBC para conectarse a bases de datos desde aplicaciones Java.
1. Define los conceptos de socket, multidifusión IP, los protocolos UDP y TCP y la función de la clase InetAddress.
2. Describe el funcionamiento del middleware y el paso de mensajes entre procesos mediante MPI.
3. Explica la diferencia entre comunicación síncrona y asíncrona, y menciona cuatro protocolos TCP como HTTP, FTP, SMTP y TELNET.
Este documento describe el desarrollo de una aplicación de chat basada en sockets en Java. Explica conceptos teóricos como el paradigma cliente-servidor, sockets, protocolos TCP/IP y hilos en Java. Detalla la arquitectura del proyecto, que utiliza sockets para establecer la comunicación entre un servidor y múltiples clientes a través de streams de entrada y salida. Finalmente, presenta fragmentos de código del servidor y cliente para implementar el chat.
El documento describe los principios de la arquitectura por capas. Propone dividir una aplicación en subsistemas independientes agrupados en capas para fomentar la reutilización y el desarrollo paralelo. Las clases en cada capa tendrán responsabilidades específicas y estarán encapsuladas para ser reutilizables.
El documento describe el uso de sockets en Java para comunicaciones entre programas. Explica cómo crear sockets cliente y servidor, abriendo flujos de entrada y salida y cerrando las conexiones. Las clases Socket y ServerSocket permiten que programas Java se comuniquen a través de redes de forma independiente de la plataforma.
1. Los sockets permiten la comunicación entre procesos en diferentes máquinas de una red. Java incluye las clases Socket y ServerSocket para establecer comunicaciones entre clientes y servidores.
2. Los clientes se conectan a servidores a través de sockets utilizando streams de entrada y salida. Los servidores escuchan en un puerto para aceptar conexiones de clientes mediante sockets.
3. Las clases DataInputStream, DataOutputStream y PrintStream facilitan la lectura y escritura de datos primitivos y cadenas entre clientes y servidores
Multiplicacion de matrices: Implementacion en clusterWalter Tejerina
La multiplicación de matrices es una de las operaciones más representativas para muchas aplicaciones, ya que involucran un elevado cálculo de datos con complejidad creciente de acuerdo a las dimensiones de las mismas. En la actualidad, dependiendo de las necesidades de cada aplicación, pueden encontrarse métodos variados para estos cálculos. En el presente trabajo se mostrará las diferencias entre un entorno paralelo, mediante una interfaz de paso de mensajes, tanto con un solo computador como con un arreglo de procesadores interconectados.
El RPC permite ejecutar código de forma remota sin preocuparse por las comunicaciones entre máquinas. Utiliza un IDL para definir los métodos del servidor y genera stubs que se encargan de empaquetar los mensajes y parámetros para la comunicación entre cliente y servidor de forma transparente. La conexión dinámica permite que los clientes localicen servidores registrados mediante un conector, el cual proporciona un handle al cliente para comunicarse con el servidor seleccionado.
El documento habla sobre sockets TCP/IP y la clase Socket en Java. Explica que un socket se define por una dirección IP local y remota, un protocolo de transporte y números de puerto. También describe cómo la clase Socket en Java oculta la complejidad de establecer conexiones de red y enviar datos a través de ellas, proporcionando una interfaz similar a trabajar con archivos. Además, incluye un ejemplo de código Java que implementa un cliente que se conecta a un servidor para obtener la fecha y hora.
Curso: Minicomputadoras: 06 Estructura de una minicomputadora.
Fue dictado en la Universidad Tecnológica del Perú -UTP, Lima - Perú, en los ciclos 2011-2 (junio/2011), 2011-3 (octubre/2011) y 2012-1 (abril/2012).
El documento describe el paradigma cliente-servidor. Explica que el paradigma es una abstracción del modelo de paso de mensajes que especifica dos tipos de procesos (servidores y clientes) y un modelo de interacción basado en petición-respuesta. También describe cómo el paradigma puede aplicarse como arquitectura de software y de sistemas distribuidos. Finalmente, explica los mecanismos de caché que mejoran la eficiencia en aplicaciones cliente-servidor al duplicar datos entre nodos.
Este documento presenta una lista de 15 miniproyectos para estudiantes sobre la configuración de servicios en Linux. Los proyectos incluyen implementar servicios como correo electrónico, tiempo, archivos, FTP y streaming. Los estudiantes trabajarán en grupos para completar un proyecto, que incluirá desarrollar e implementar el servicio, y entregar un informe detallado sobre el trabajo.
El documento describe el protocolo de llamada a procedimiento remoto (RPC), el cual permite a un programa ejecutar código en otra máquina de forma remota sin preocuparse por las comunicaciones. RPC funciona a través de stubs y skeletons que encapsulan las comunicaciones entre el cliente y servidor, permitiendo al programador tratar las llamadas como si fueran locales. RPC se usa comúnmente para comunicación entre procesos en redes de computadoras.
C documents and settings_pc10_configuración local_datos de programa_mozilla_...ORLANDO LOPEZ
Este documento proporciona una introducción al uso de sockets en Windows para la comunicación entre procesos. Explica brevemente qué son los sockets, los dos tipos principales de comunicación (servidor serial y concurrente), y presenta el algoritmo básico para clientes y servidores. Además, describe algunas funciones clave como socket(), bind(), listen(), accept(), connect(), send() y recv() que se utilizan para establecer la conexión y enviar/recibir datos. El objetivo es servir como punto de partida para aquellos interesados en aprender sobre sockets en C
Este documento describe el funcionamiento de las llamadas a procedimientos remotos (RPC). Explica que RPC permite que un procedimiento se ejecute en una máquina remota de forma transparente para el programador. Describe los roles del cliente y servidor, el empaquetado y desempaquetado de parámetros, y cómo se manejan los errores para que RPC funcione de forma fiable.
El documento describe varios mecanismos de comunicación entre procesos en Java, incluyendo sockets TCP y UDP, multicast, URLs y RMI. Los sockets TCP son orientados a conexión mientras que los sockets UDP permiten el envío asíncrono de mensajes. La clase URL encapsula la conexión TCP. RMI permite la invocación remota de operaciones para desarrollar sistemas distribuidos.
Este documento describe conceptos clave de la programación orientada a objetos en Java como la herencia, polimorfismo, interfaces y clases abstractas. Explica que la herencia permite crear nuevas clases a partir de clases existentes reutilizando sus métodos y campos. El polimorfismo permite que una variable pueda hacer referencia a objetos de tipos relacionados. Las interfaces definen lo que deben hacer las clases sin especificar cómo, y solo pueden contener constantes y firmas de métodos.
Este documento presenta una introducción a Java, incluyendo las herramientas de desarrollo, tipos de aplicaciones, tipos de datos primitivos, operadores, variables, constantes, entrada y salida. También cubre temas como conversiones de tipos, cadenas, funciones matemáticas y estructuras de control.
Este documento presenta una introducción a Java. Explica la historia y evolución de Java desde su creación en 1991 hasta su uso actual. También describe las características clave de Java como un lenguaje de programación orientado a objetos como abstracción, encapsulación, herencia y polimorfismo. Finalmente, incluye ejemplos simples de programas Java.
Este documento describe conceptos básicos de programación orientada a objetos en Java. Explica las definiciones de objetos, clases, métodos y atributos. También cubre temas como encapsulamiento, herencia, paquetes, relaciones entre clases y el uso de arreglos y matrices.
Este documento proporciona una introducción a los conceptos fundamentales de la investigación. Explica que la investigación es una actividad sistemática para obtener nueva información y conocimientos mediante la observación y experimentación. Luego describe los diferentes tipos de actividades en el sistema de ciencia e innovación tecnológica, incluida la investigación y el desarrollo. Finalmente, destaca las etapas clave de un proyecto de investigación, como la planificación, ejecución, procesamiento de información y redacción del informe.
El documento habla sobre interfaces, clases abstractas, herencia y polimorfismo en Java. Explica que las interfaces definen contratos de métodos sin implementación, las clases abstractas pueden contener métodos abstractos y concretos, la herencia permite que las subclases extiendan la funcionalidad de las superclases, y el polimorfismo permite que objetos de diferentes tipos se comporten de forma uniforme. Luego, presenta un ejemplo de clases Empleado y Administrador que ilustra la herencia, donde la clase Administrador extiende a E
Este documento describe conceptos básicos de las matemáticas discretas como conjuntos, relaciones y propiedades de relaciones. Explica que una relación es una correspondencia entre los elementos de dos conjuntos y define las propiedades de reflexividad, simetría, asimetría, antisimetría y transitividad. También provee ejemplos de relaciones como la igualdad y relaciones de orden entre números.
Este documento describe un proyecto para desarrollar una herramienta que resuelva problemas comunes en matemáticas discretas de manera eficiente. Estos incluyen el cálculo de factoriales, operaciones con conjuntos, combinaciones y permutaciones, mínimo común múltiplo y máximo común divisor, e interpretación de reglas de sucesiones. La herramienta tendrá una interfaz gráfica que permita ingresar datos y mostrar resultados de manera intuitiva.
El documento define diferentes tipos de relaciones entre conjuntos como inyectiva, sobreyectiva, biyectiva e inversa. También presenta ejemplos de relaciones entre conjuntos A, B, C y D que ilustran estas propiedades. Finalmente, discute cómo probar si una relación es parcialmente ordenada verificando si es reflexiva, antisimétrica y transitiva.
Este documento describe los pasos para codificar una aplicación a partir de un diseño, incluyendo seleccionar un lenguaje de programación adecuado, construir la solución física, y considerar objetivos como corrección, claridad y eficiencia. También cubre elementos clave de la codificación como lenguajes de programación, ambientes de desarrollo y documentación.
El documento describe varios temas clave relacionados con el diseño de sistemas, incluyendo: 1) el paso del análisis al diseño mediante la transformación de especificaciones en soluciones lógicas, 2) el diseño orientado a objetos utilizando clases de objetos autocontenidos, y 3) consideraciones de diseño para interfaces, bases de datos, entrada, salida y arquitectura que satisfagan los requisitos del usuario y permitan la interacción efectiva con el sistema.
El documento describe el análisis orientado a objetos, el cual modela un sistema como un grupo de objetos que interactúan entre sí utilizando el lenguaje unificado de modelado (UML). Las partes esenciales para visualizar la construcción de un sistema son los objetos, las relaciones y los diagramas. Los objetos son los elementos centrales para crear modelos orientados a objetos y representan personas, lugares o cosas relevantes del sistema con atributos y tareas. Las relaciones muestran las asociaciones entre los objetos. Los diagramas proporcionan la descripción
El documento describe tres técnicas para recopilar información: entrevistas, JAD (Joint Application Design) y cuestionarios. JAD involucra a desarrolladores y usuarios para especificar requisitos y diseñar interfaces. Los cuestionarios pueden usarse para estudiar actitudes mediante preguntas abiertas o cerradas, y cuantificar aspectos clave. Se deben considerar ventajas y desventajas al elegir el tipo de preguntas para los cuestionarios.
El documento describe diferentes técnicas para recopilar información, enfocándose en las entrevistas. Explica los pasos para realizar entrevistas como leer antecedentes, establecer objetivos, decidir a quién entrevistar, preparar al entrevistado, y decidir el tipo de preguntas y estructura. También cubre tipos de preguntas como abiertas, cerradas y de sondeo, así como estructuras como pirámide, embudo y diamante.
El documento describe el proceso de ingeniería de requerimientos para el desarrollo de software. Explica que la ingeniería de requerimientos se enfoca en generar especificaciones claras de las necesidades de los usuarios a través de un proceso cíclico que incluye la especificación de requerimientos del negocio y de usuario, un estudio de viabilidad y la validación de requerimientos.
El documento describe el análisis de sistemas como un proceso para identificar los requisitos de información de una organización. Explica que el análisis de sistemas incluye elementos como realizar un análisis técnico y financiero, identificar las necesidades del cliente, y especificar la arquitectura y subsistemas del sistema. Además, describe que el analista debe producir una especificación que satisfaga los objetivos del proyecto de manera óptima.
El documento describe diferentes métricas y técnicas para estimar proyectos de software. Explica que las métricas son medidas para conocer el tamaño y características de un software, y que son la base para planificar un proyecto. Luego detalla distintos tipos de métricas como las directas, indirectas y normalizadas, así como técnicas de estimación como los modelos de costos, juicio de expertos, analogía, ley de Parkinson y pricing to win.
El documento describe las actividades clave en la gestión de proyectos informáticos, incluyendo definir el alcance y objetivos del proyecto, planificar el proyecto asignando tareas, comunicar el plan efectivamente al equipo, registrar incidencias, gestionar riesgos, supervisar el progreso y documentar el proyecto. También recomienda el uso de herramientas para la gestión y planeación de proyectos.
La ingeniería de software es una disciplina relativamente joven que se estableció para controlar la complejidad creciente del desarrollo de software. La ingeniería de software busca establecer procesos sistemáticos para lograr riqueza funcional y alta calidad en el tiempo y costo programados, abordando problemas como la estimación errónea de productividad y la falta de planeación y control en los proyectos de software.
1. Pr´actica 1
Intercomunicaci´on con sockets
Java
1.1 Enunciado
El objetivo de la primera pr´actica es por una parte, familiarizar al alumno con el uso
de las herramientas de construcci´on programas en Java, y por otra conseguir que el
alumno alcance a apreciar el coste de la realizaci´on de llamadas a un servidor en
diferentes modalidades.
1.1.1 Descripci´on
La pr´actica consistir´a en la implementaci´on y puesta a punto de un cliente simple,
que realizar´a un n´umero suficiente de llamadas a un servidor utilizando los m´etodos
descritos m´as adelante. Tras lo anterior, el objetivo es medir el tiempo consumido
por cada llamada. Se utilizar´an tres tipos de servidores:
1. Un objeto local.
En este caso, se est´a midiendo el coste de una llamada a subrutina local.
2. Un proceso esperando peticiones via UDP.
3. Un proceso esperando peticiones TCP.
Adicionalmente, para los tipos 2 y 3, se considerar´an dos formas de localizarlos:
3
2. 4 PR ´ACTICA 1. INTERCOMUNICACI ´ON CON SOCKETS JAVA
1. El servidor y el cliente est´an en el mismo nodo.
2. El servidor est´a en un nodo distinto al del cliente.
1.1.2 El servidor
Los servidores de tipo 2, y 3, son implementados dentro de un programa que se
suministra con la pr´actica. Su lectura es aconsejable. Dicho programa podr´a ser
ejecutado con tres par´ametros:
servidor (t
u) puerto duraci´on
Los par´ametros tienen el siguiente significado:
1. El primero indica TCP/IP si su valor es t, o UDP/IP si su valor es u.
2. El segundo indica el puerto en que esperar´a la petici´on.
3. El tercero indica cu´anto tiempo se va a tardar en ejecutar la petici´on. La dura-
ci´on est´a expresada en milisegundos.
Para la primera pr´actica, el tercer par´ametro ser´a opcional, y su ausencia indicar´a un
valor igual a 0. Eso querr´a decir que el objeto servidor no retardar´a en absoluto la
contestaci´on al cliente.
En el caso 1, el servidor es un objeto. Dicho objeto deber´a ser implementado en el
propio programa cliente, y deber´a tambi´en tener un m´etodo llamado servicio-
local, que ser´a invocado por el cliente.
1.1.3 El cliente
El c´odigo de cliente deber´a ser escrito por el alumno. El esquema del c´odigo a desa-
rrollar por la funci´on principal aparece en la figura 1.1.
La forma exacta en que sea llamado el servidor dentro del bucle debe ser implantada
de la forma que se crea m´as conveniente, aunque se aconseja la creaci´on de una clase
intermedia que incorpore tres m´etodos. Uno de ellos para la invocaci´on local, otro
para la UDP y el tercero para la TCP.
NOTA: Ser´a necesario especificar por medio de par´ametros del programa cliente: los
valores de MAXLOOP, el puerto de contacto con el servidor, el nodo donde reside el
servidor, y el m´etodo de contacto (TCP/UDP/local).
3. 1.2. COMENTARIOS 5
public class Cliente
public static void main( String[] args )
Tomar tiempo
for (i = 0; i < MAXLOOP; i++)
Enviar mensaje al servidor
Esperar respuesta del servidor¡
Tomar tiempo
tiempo por llamada = Dif. de tiempo/MAXLOOP¡
¡
Figura 1.1: Algoritmo a seguir en el cliente.
1.1.4 Documentaci´on a presentar
Como documentaci´on a entregar deber´a elaborarse un peque˜no informe donde apa-
rezca el c´odigo del programa cliente, una tabla con los valores obtenidos para tres
valores razonables de MAXLOOP y una justificaci´on sobre qu´e factores influyen en
los resultados obtenidos y por qu´e se dan esas diferencias entre los casos estudiados.
Este informe debe presentarse en la sesi´on inicial de la segunda pr´actica.
1.2 Comentarios
En las siguientes secciones se aclaran algunos puntos necesarios para resolver el
enunciado presentado.
1.2.1 Obtenci´on de tiempos
Para poder obtener el tiempo actual en Java, se puede utilizar la siguiente operaci´on
de la clase System:
static long CurrentTimeMillis();
Esta operaci´on devuelve el tiempo actual en milisegundos, tomando como origen
el 1 de enero de 1970. Por ser una operaci´on est´atica, no es necesario instanciar
ning´un objeto de la clase System para poderla utilizar. Basta con a˜nadir como
4. 6 PR ´ACTICA 1. INTERCOMUNICACI ´ON CON SOCKETS JAVA
prefijo el nombre de la clase a la que pertenece y utilizar el punto para separar ambos
componentes.
Otra cosa a tener en cuenta para obtener el tiempo invertido en un env´ıo y recepci´on
de mensaje est´a relacionada con c´omo expresar el resultado. En Java, si se dividen
dos n´umeros enteros, el resultado tambi´en ser´a un n´umero entero. Como los tiem-
pos a tomar van a ser del orden de unos pocos milisegundos, convendr´ıa dar tambi´en
algunos “decimales”. Para ello convendr´ıa convertir, antes de efectuar la divisi´on co-
rrespondiente, tanto el tiempo transcurrido como el n´umero de repeticiones a valores
reales.
Por ejemplo, si tenemos el tiempo total transcurrido en una variable tiempo de tipo
long y el n´umero de repeticiones efectuadas en otra variable del mismo tipo llamada
nveces, bastar´ıa con escribir lo siguiente:
double tiempo2;
tiempo2 = new Long( tiempo ).doubleValue() /
˜new Long( nveces ).doubleValue();
Donde la clase Long permite mantener un valor de tipo long pero proporciona
adem´as un conjunto de operaciones para realizar las conversiones desde o hacia otros
tipos. En nuestro caso, se emplea la operaci´on doubleValue() para convertir el
long a double. El valor a convertir se pasa como argumento en el constructor de
la clase.
1.2.2 Uso de sockets
Para obtener una descripci´on detallada de las interfaces relacionadas con sockets
en Java puede consultarse la documentaci´on que acompa˜na al JDK. En caso de no
tener acceso a ella, a continuaci´on aparecen algunas de las operaciones presentes
en estas clases (en concreto, aquellas que van a resultar necesarias para desarro-
llar la pr´actica). T´engase en cuenta que estas clases se encuentran en los paque-
tes java.net (para el caso de DatagramPacket, DatagramSocket, Inet-
Address y Socket) y java.io (para las clases InputStream y Output-
Stream). Por tanto, deber´a realizarse el import correspondiente para tener acceso
a ellas.
5. 1.2. COMENTARIOS 7
Clase DatagramPacket
Esta clase modela un paquete a transmitir mediante sockets UDP. Las operaciones a
utilizar van a ser:
DatagramPacket( byte[] buf, int longitud )
Constructor utilizado para poder recibir paquetes de la longitud especificada
en el segundo argumento. El contenido del paquete se dejar´a en el vector de
octetos especificado en el primer argumento una vez se haya podido recibir la
informaci´on.
Se utilizar´a para recibir la contestaci´on del servidor.
DatagramPacket( byte[] buf, int longitud, InetAddress
direcci´on, int puerto )
Constructor utilizado para poder enviar paquetes con la longitud especificada
en el segundo argumento hacia el ordenador cuya direcci´on y puerto se han
dado en los dos siguientes.
Se utilizar´a para construir el mensaje a enviar al servidor.
Clase DatagramSocket
Esta clase modela un socket UDP. Las operaciones a utilizar son:
DatagramSocket()
Construye un socket UDP y lo asocia a alg´un puerto libre en la m´aquina local.
Aunque existen variantes para especificar un puerto y/o una m´aquina, no son
de inter´es para el cliente (ver el c´odigo del servidor, en la secci´on 1.3) ya que
aqu´ı ´unicamente habr´a que especificar la direcci´on destino en los paquetes a
enviar.
void receive( DatagramPacket p )
El hilo de ejecuci´on permanece bloqueado hasta que se ha recibido un paquete
a trav´es de este socket. La informaci´on recibida se encuentra en el vector
asociado al paquete pasado como ´unico argumento.
void send( DatagramPacket p )
Env´ıa un paquete a trav´es del socket. El paquete debe tener asociada la direc-
ci´on y el puerto del socket a quien va dirigido el env´ıo.
6. 8 PR ´ACTICA 1. INTERCOMUNICACI ´ON CON SOCKETS JAVA
Clase InetAddress
Esta clase modela la direcci´on IP de una m´aquina. Se necesita para especificar la
ubicaci´on del servidor, bien sea en la m´aquina local o en una m´aquina remota. Las
operaciones a utilizar son:
static InetAddress getByName( String host )
Dado un nombre de m´aquina, devuelve un objeto InetAddress con su di-
recci´on.
static InetAddress getLocalHost()
Devuelve un objeto InetAddress con la direcci´on de la m´aquina local.
Clase Socket
Esta clase implementa un socket cliente con comunicaci´on TCP. Los sockets servido-
res para TCP est´an modelados por la clase ServerSocket, pero ´esta ya no resulta
necesaria para el caso del programa cliente. Obs´ervese, adem´as, que la comunica-
ci´on TCP est´a orientada a conexi´on y en el programa servidor esta conexi´on se crea
y se cierra para cada petici´on efectuada por el cliente. Por tanto, el cliente deber´a
estructurarse de igual manera.
Las operaciones a utilizar son:
Socket( String host, int puerto )
Crea un socket y lo conecta a la m´aquina remota cuyo nombre sea host, en el
puerto especificado como segundo argumento.
InputStream getInputStream()
Obtiene el InputStream a utilizar para obtener la informaci´on recibida en
el socket.
OutputStream getOutputStream()
Obtiene el OutputStream a utilizar para enviar informaci´on por el socket.
void close()
Cierra el socket, cortando la conexi´on con el servidor.
7. 1.3. PROGRAMAS FACILITADOS 9
Clase InputStream
La ´unica operaci´on a utilizar en este caso es:
int read()
que devuelve el siguiente octeto presente en ese canal de entrada.
Aunque existen otras operaciones para obtener informaci´on desde el InputStream,
como el servidor ´unicamente escribe un octeto, en el cliente s´olo habr´a que leer ese
octeto.
Clase OutputStream
Al igual que en la clase anterior, ´unicamente hay que escribir un octeto en el socket,
por lo que la operaci´on a utilizar es:
void write( int octeto )
1.3 Programas facilitados
A continuaci´on se presenta el c´odigo del programa servidor que se mencionaba en el
enunciado.
/************************************************************************/
/* */
/* FICHERO: servidor.java */
/* */
/* DESCRIPCI´ON: Contiene la implementaci´on del servidor de la 1a pr´ac- */
/* tica. Ofrece un m´etodo por cada una de las peticiones que es */
/* capaz de atender (UDP y TCP). Existe una subclase "multi" que */
/* permite la atenci´on de m´ultiples peticiones mediante m´ultiples */
/* hilos de ejecuci´on (TCP). */
/* */
/************************************************************************/
import java.net.*; // El paquete java.net se necesita para //
// las clases Socket, ServerSocket, //
// DatagramSocket y DatagramPacket. //
import java.io.*; // El paquete java.io se necesita para //
// las clases InputStream y OutputStream//
/*======================================================================*/
/* servidor */
/* Clase que implementa un m´etodo por cada modalidad de llamada. */
/* */
/*======================================================================*/
8. 10 PR ´ACTICA 1. INTERCOMUNICACI ´ON CON SOCKETS JAVA
public class servidor
// La subclase multi implementa el //
// c´odigo de los hilos de ejecuci´on que //
// se utilizan en la variante multi- //
// thread del servidor TCP. //
class multi implements Runnable
Socket so; // El socket "so" se utiliza para con- //
// testar una petici´on, despu´es se //
// cierra. //
long dur; // "dur" mantiene la duraci´on de la //
// espera asociada a cada petici´on. //
// En el constructor se pasa el socket //
// TCP a utilizar y la duraci´on de la //
// espera de la pr´oxima petici´on. //
public multi(Socket s, long duration)
so = s;
dur = duration;¡
// Este es el c´odigo que ejecuta cada //
// uno de los hilos servidores. //
public synchronized void run()
try
// Se obtiene un stream de entrada //
// desde el socket. //
InputStream is = so.getInputStream();
// Se hace lo mismo para el stream de //
// salida en el que se va a dejar la //
// respuesta. //
OutputStream os = so.getOutputStream();
int ch;
// El cliente s´olo env´ıa un car´acter. //
ch = is.read();
if ( dur > 0 )
wait(dur); // Esperamos el tiempo indicado. //
os.write(65); // La contestaci´on s´olo es un car´acter. //
so.close(); // Se cierra el socket, ya no se va a //
// volver a utilizar. //¡
catch (IOException e)
System.out.println("Algo fue mal");¡
catch (InterruptedException e)
System.out.println("Adi´os");¡
¡
¡
// M´etodo a utilizar con un cliente //
// UDP. //
public synchronized void serverudp(int port, long dur)
DatagramSocket ds; // Socket para UDP. //
// El contenido del paquete UDP va a //
// ser un vector de bytes con una sola //
9. 1.3. PROGRAMAS FACILITADOS 11
// componente. //
byte[] buf = new byte[1];
// El paquete UDP se crea con el vector //
// anterior. //
DatagramPacket dp = new DatagramPacket(buf,1);
try
// Hay que crear un socket UDP asociado //
// al puerto especificado como primer //
// argumento. //
ds = new DatagramSocket(port);¡
catch (Exception e)
System.out.println("No se ha podido asociar el socket " +
"UDP al puerto " + port);
return;¡
while (true)
try
// Se recibe una petici´on por parte del //
// cliente. Una vez obtenida hay que //
// esperar el tiempo indicado para si- //
// mular la ejecuci´on de la petici´on. //
ds.receive(dp);
if ( dur > 0 )
wait(dur);
// Al final se contesta, reenviando el //
// mismo paquete recibido. //
ds.send(dp);¡
catch (IOException e)
System.out.println("No se ha podido recibir.");
return;¡
catch (InterruptedException e)
System.out.println("Adi´os");
return;¡
¡
¡
// M´etodo a utilizar con clientes TCP. //
public synchronized void servertcp(int port, long dur)
ServerSocket ss;
Socket so;
InputStream is;
OutputStream os;
try
// Se crea el socket servidor ss, aso- //
// ci´andolo al n´umero de puerto especi- //
// ficado como primer argumento. //
ss = new ServerSocket(port);¡
catch (Exception e)
System.out.println("No se puede asociar el puerto " + port +
" al socket TCP.");
return;
10. 12 PR ´ACTICA 1. INTERCOMUNICACI ´ON CON SOCKETS JAVA
¡
while (true)
try
// Esperar conexi´on por parte del //
// cliente y generar un nuevo socket //
// para atenderla cuando se establezca. //
so = ss.accept();
// "is" va a permitir la lectura de //
// informaci´on existente en el socket. //
is = so.getInputStream();
// "os" se utiliza para escribir infor- //
// maci´on que podr´a obtener el cliente. //
os = so.getOutputStream();
int ch;
ch = is.read(); // Esperar hasta poder leer un byte. //
if ( dur > 0 )
wait(dur); // Simular la atenci´on de la petici´on. //
os.write(65); // Enviar la respuesta. //
so.close(); // Cerrar el socket utilizado para //
// esta conexi´on. //¡
catch (IOException e)
System.out.println("Algo fue mal");¡
catch (InterruptedException e)
System.out.println("Adi´os");¡
¡
¡
// Versi´on TCP con m´utiples hilos. //
public synchronized void servertcpmt(int port, long dur)
ServerSocket ss;
Socket so;
try
// Asociar un puerto al socket servidor //
// a utilizar para esperar las conexio- //
// nes de los clientes. //
ss = new ServerSocket(port);¡
catch (Exception e)
System.out.println("No se puede asociar el puerto " + port +
" al socket TCP.");
return;¡
while (true)
try
// Aceptar las conexiones de los clien- //
// tes, creando un nuevo socket por //
// cada una de ellas. //
so = ss.accept();
// Crear un thread "multi" que sirva //
11. 1.3. PROGRAMAS FACILITADOS 13
// la petici´on que acaba de llegar. //
new Thread(new multi(so,dur)).start();¡
catch (IOException e)
System.out.println("Algo fue mal");¡
¡
¡
public static void main(String[] args)
int port = 8000;
boolean udp = false;
boolean MT = false;
long duration = 0;
servidor worker = new servidor();
// Extraccion de argumentos. //
if (args.length < 2)
System.out.println("N´umero de argumentos err´oneo");
return;¡
// Comprobar el primer argumento. Si es //
// "u", utilizar el servidor UDP. Si es //
// "t", utilizar el servidor TCP. En //
// cualquier otro caso, utilizar el //
// servidor multithread. //
if (args[0].equalsIgnoreCase("u"))
System.out.println("Servidor UDP");
udp = true;¡
else if (args[0].equalsIgnoreCase("t"))
System.out.println("Servidor TCP");
udp = false;¡
else
System.out.println("Servidor TCP MT");
MT = true;¡
try
// Obtener el n´umero de puerto a partir //
// del segundo argumento. //
port = (new Integer(args[1])).intValue();¡
catch (Exception e)
System.out.println(args[1] + "no es un n´umero v´alido de puerto");
return;¡
// Si existe un tercer argumento ser´a //
// la duraci´on a asignar al servicio de //
// cada petici´on. //
if (args.length == 3)
try
duration = (new Long(args[2])).longValue();
// La duraci´on no puede ser negativa. //
if (duration < 0)
duration = -duration;
12. 14 PR ´ACTICA 1. INTERCOMUNICACI ´ON CON SOCKETS JAVA
¡
catch (Exception e)
System.out.println(args[2] + "no es un valor adecuado de" +
" duraci´on.");
return;¡
¡
else
duration = 0;¡
// L´ogica del programa. //
if (udp)
worker.serverudp(port,duration);¡
else if (MT)
worker.servertcpmt(port,duration);¡
else
worker.servertcp(port,duration);¡
¡
¡