domingo, 19 de julio de 2009

CHAT UDP

UDP
¿Qué es UDP?
UDP son las siglas de Protocolo de Datagrama de Usuario es un protocolo no orientado a conexión de la capa de transporte del modeloTCP/IP.
En la familia de protocolos de Internet. UDP proporciona una sencilla interfaz entre la capa de red y la capa de aplicación. UDP no otorga garantías para la entrega de sus mensajes y el origen UDP no retiene estados de los mensajes UDP que han sido enviados a la red. UDP.
El encabezado del segmento UDP es:
Puerto de origen(16 bits);
Puerto de destino(16 bits);
Longitud total(16 bits);
Suma de comprobación del encabezado(16 bits);
Datos (longitud variable).
Puerto de origen: Es el número de puerto relacionado con la aplicación del remitente del segmento UDP. Este campo representa una dirección de respuesta para el destinatario. Por lo tanto, este campo es opcional. Esto significa que si el puerto de origen no está especificado, los 16 bits de este campo se pondrán en cero. En este caso, el destinatario no podrá responder (lo cual no es estrictamente necesario, en particular para mensajes unidireccionales).
Puerto de destino: Este campo contiene el puerto correspondiente a la aplicación del equipo receptor al que se envía.
Longitud: Este campo especifica la longitud total del segmento, con el encabezado incluido. Sin embargo, el encabezado tiene una longitud de 4 x 16 bits (que es 8 x 8 bits), por lo tanto la longitud del campo es necesariamente superior o igual a 8 bytes.
Suma de comprobación: Es una suma de comprobación realizada de manera tal que permita controlar la integridad del segmento.Codigo Servidor - ClienteServidor.java// Servidor que recibe y envía paquetes de/a un cliente.import java.io.*;import java.net.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Servidor extends JFrame {private JTextArea areaPantalla;private DatagramSocket socket;// configurar GUI y DatagramSocketpublic Servidor(){super( "Servidor" );areaPantalla = new JTextArea();getContentPane().add( new JScrollPane( areaPantalla ),BorderLayout.CENTER );setSize( 400, 300 );setVisible( true );// crear objeto DatagramSocket para enviar y recibir paquetestry {socket = new DatagramSocket( 5000 );}// procesar los problemas que pueden ocurrir al crear el objeto DatagramSocketcatch( SocketException excepcionSocket ) {excepcionSocket.printStackTrace();System.exit( 1 );}} // fin del constructor de Servidor// esperar a que lleguen los paquetes, mostrar los datos y repetir el paquete al clienteprivate void esperarPaquetes(){while ( true ) { // iterar infinitamente// recibir paquete, mostrar su contenido, devolver copia al clientetry {// establecer el paquetebyte datos[] = new byte[ 100 ];DatagramPacket recibirPaquete =new DatagramPacket( datos, datos.length );socket.receive( recibirPaquete ); // esperar el paquete// mostrar la información del paquete recibidomostrarMensaje( "\nPaquete recibido:" +"\nDel host: " + recibirPaquete.getAddress() +"\nPuerto del host: " + recibirPaquete.getPort() +"\nLongitud: " + recibirPaquete.getLength() +"\nContenido:\n\t" + new String( recibirPaquete.getData(),0, recibirPaquete.getLength() ) );enviarPaqueteACliente( recibirPaquete ); // enviar paquete al cliente}// procesar los problemas que pueden ocurrir al manipular el paquetecatch( IOException excepcionES ) {mostrarMensaje( excepcionES.toString() + "\n" );excepcionES.printStackTrace();}} // fin de instrucción while} // fin del método esperarPaquetes// repetir el paquete al clienteprivate void enviarPaqueteACliente( DatagramPacket recibirPaquete )throws IOException{mostrarMensaje( "\n\nRepitiendo datos al cliente..." );// crear paquete a enviarDatagramPacket enviarPaquete = new DatagramPacket(recibirPaquete.getData(), recibirPaquete.getLength(),recibirPaquete.getAddress(), recibirPaquete.getPort() );socket.send( enviarPaquete ); // enviar el paquetemostrarMensaje( "Paquete enviado\n" );}// método utilitario que es llamado desde otros subprocesos para manipular a// areaPantalla en el subproceso despachador de eventosprivate void mostrarMensaje( final String mensajeAMostrar ){// mostrar el mensaje del subproceso de ejecución despachador de eventosSwingUtilities.invokeLater(new Runnable() { // clase interna para asegurar que la GUI se actualice apropiadamentepublic void run() // actualiza areaPantalla{areaPantalla.append( mensajeAMostrar );areaPantalla.setCaretPosition(areaPantalla.getText().length() );}} // fin de la clase interna); // fin de la llamada a SwingUtilities.invokeLater}public static void main( String args[] ){JFrame.setDefaultLookAndFeelDecorated(true);Servidor aplicacion = new Servidor();aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );aplicacion.esperarPaquetes();}} // fin de la clase Servidor*****************************************************************************Cliente.java// Cliente que envía y recibe paquetes a/de un servidor.import java.io.*;import java.net.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Cliente extends JFrame {private JTextField campoIntroducir;private JTextArea areaPantalla;private DatagramSocket socket;// configurar GUI y DatagramSocketpublic Cliente(){super( "Cliente" );Container contenedor = getContentPane();campoIntroducir = new JTextField( "Escriba aquí el mensaje" );campoIntroducir.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent evento ){// crear y enviar el paquetetry {areaPantalla.append( "\nEnviando paquete que contiene: " +evento.getActionCommand() + "\n" );// obtener mensaje del campo de texto y convertirlo en arreglo byteString mensaje = evento.getActionCommand();byte datos[] = mensaje.getBytes();// crear enviarPaqueteDatagramPacket enviarPaquete = new DatagramPacket( datos,datos.length, InetAddress.getLocalHost(), 5000 );socket.send( enviarPaquete ); // enviar paqueteareaPantalla.append( "Paquete enviado\n" );areaPantalla.setCaretPosition(areaPantalla.getText().length() );}// procesar los problemas que pueden ocurrir al crear o enviar el paquetecatch ( IOException excepcionES ) {mostrarMensaje( excepcionES.toString() + "\n" );excepcionES.printStackTrace();}} // fin de actionPerformed} // fin de la clase interna); // fin de la llamada a addActionListenercontenedor.add( campoIntroducir, BorderLayout.NORTH );areaPantalla = new JTextArea();contenedor.add( new JScrollPane( areaPantalla ),BorderLayout.CENTER );setSize( 400, 300 );setVisible( true );// crear objeto DatagramSocket para enviar y recibir paquetestry {socket = new DatagramSocket();}// atrapar los problemas que pueden ocurrir al crear objeto DatagramSocketcatch( SocketException excepcionSocket ) {excepcionSocket.printStackTrace();System.exit( 1 );}} // fin del constructor de Cliente// esperar a que lleguen los paquetes del Servidor, mostrar el contenido de los paquetesprivate void esperarPaquetes(){while ( true ) { // iterar infinitamente// recibir el paquete y mostrar su contenidotry {// establecer el paquetebyte datos[] = new byte[ 100 ];DatagramPacket recibirPaquete = new DatagramPacket(datos, datos.length );socket.receive( recibirPaquete ); // esperar un paquete// mostrar el contenido del paquetemostrarMensaje( "\nPaquete recibido:" +"\nDel host: " + recibirPaquete.getAddress() +"\nPuerto del host: " + recibirPaquete.getPort() +"\nLongitud: " + recibirPaquete.getLength() +"\nContenido:\n\t" + new String( recibirPaquete.getData(),0, recibirPaquete.getLength() ) );}// procesar los problemas que pueden ocurrir al recibir o mostrar el paquetecatch( IOException excepcion ) {mostrarMensaje( excepcion.toString() + "\n" );excepcion.printStackTrace();}} // fin de instrucción while} // fin del método esperarPaquetes// método utilitario que es llamado desde otros subprocesos para manipular a// areaPantalla en el subproceso despachador de eventosprivate void mostrarMensaje( final String mensajeAMostrar ){// mostrar mensaje del subproceso de ejecución despachador de eventosSwingUtilities.invokeLater(new Runnable() { // clase interna para asegurar que la GUI se actualice apropiadamentepublic void run() // actualiza areaPantalla{areaPantalla.append( mensajeAMostrar );areaPantalla.setCaretPosition(areaPantalla.getText().length() );}} // fin de la clase interna); // fin de la llamada a SwingUtilities.invokeLater}public static void main( String args[] ){JFrame.setDefaultLookAndFeelDecorated(true);Cliente aplicacion = new Cliente();aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );aplicacion.esperarPaquetes();}} // fin de la clase Cliente

miércoles, 6 de mayo de 2009

Vector

Un Vector es una matriz ampliable de referencia a objeto. Internamente, un Vector implementa una estrategia de crecimiento para minimizar la reasignación y el espacio desperdiciado. Los objetos se pueden almacenar al final de un Vector utilizando el método addElement() o en un índice dado mediante el método insertElement(). Se puede almacenar una matriz de objetos en un Vector utilizando el método copyInto(). Una vez se ha almacenado un conjunto de objetos en un Vector, se puede utilizar para buscar un elemento en concreto utilizando los métodos contains(), indexOf() o lastIndexOf(). También se puede extraer un objeto de una posición específica de un Vector utilizando los métodos elementAt(), firstElement() y lastElement().

Stack

Un Stack, pila, es una subclase de Vector que implementa una pila simple del tipo FIFO (primero en entrar, primero en salir. Además de los métodos estándar de la clase padre, Stack implementa el método push(), que coloca objetos en la parte superior de la pila y el método pop() que retira y devuelve el objeto superior de la pila. También dispone del método peek() para obtener el objeto superior de la pila, pro no retirarlo. El método empty() devolverá true si no hay nada en la pila. El método search() comprobará si existe un objeto en la pila y devolverá el número de llamadas al método pop() que se necesitarán realizar para que dicho objeto se quede en la parte superior de la pila, o –1 si el objeto pasado como parámetro no se encuentra.

Hash Table

Una Hashtable, tabla hash, es una implementación concreta de un Dictionary. Se puede utilizar una instancia de Hashtable para almacenar objetos arbitrarios que están indexados por cualquier otro objeto arbitrario. La utilización más habitual de una Hashtable es utilizar un String como clave para almacenar objetos como valores.

Bitset

Los contenedores tipo bitset están pensados para almacenar bits. Es decir, conjuntos de N valores 0/1 denominados máscaras de bits ("Bitmask types"). En cierto sentido un bitset es el contenedor más simple del mundo, contiene un número máximo N (determinado en el momento de su definición) de elementos tipo bit. Podríamos considerar que un bitset es como una matriz de bits, de forma que podría establecerse un cierto paralelismo:

bit mb[125]; // L1: matriz de bits de 125 elementos

bitset <125> bs; // L2: bitset de 125 elementos


Naturalmente la sentencia L1 es solo didáctica, no es posible en C++ porque no existe un tipo bit nativo. En cambio L2 si es correcta; define un contenedor bs de tipo bitset de 125 elementos.

Dataminig (Mineria de Datos)

El datamining (mineria de datos), es el conjunto de tecnicas y tecnologias que permiten explorar grandes bases de datos, de manera automática o semiautomática, con el objetivo de encontrar patrones repetitivos, tendencias o reglas que expliquen el comportamiento de los datos en un determinado contexto.

La mineria de datos hace uso de todas las técnicas que puedan aportar información útil, desde un sencillo analisis gráfico, pasando por metodos estadísticos más o menos complejos, complementados por metodos y algoritmos del campo de la inteligencia artifical y el aprendizaje automático que resuelven problemas tipicos de agrupamiento, automático, clasificación, predicción de val0res, detección de patrones, asociación de atributos, etc. Es, por tanto, un campo multidisciplinar que cubre numerosas áreas y se aborda desde múltiples puntos de vista, como la informatica (cálculo automático) o la ingenieria.


Protocolo TCP/IP

TCP/IP no es un único protocolo, sino que es en realidad lo que se conoce con este nombre es un comjunto de protocolos, sino que es en realidad lo que se conoce con este nombre es un conjunto de protocolos que cubren los distintos niveles del modelo OSI. Los dos protocolos mas importantes son el TCP (Transmission Control Protocol) y el IP (Internet Protocol), que son los que dan nombre al conjunto.
El TCP/IP necesita funcionar sobre algun tipo de red o medio físico que proporcionar sus propios protocolos para el nivel de enlace de Internet. Por este motivo hay que tener en cuenta que los protocoloes utilizados en este nivel pueden ser muy diversos y no forman parte del conjunto TCP/IP. Sin embargo, esto no debe ser problemático puesto que una de las funciones y ventajas principales del TCP/IP. Sin embargo, esto no debe ser problemático puesto que una de las funciones y ventajas principales del TCP/IP es proporcionar una abstraccion del medio de forma
que sea posible el intercambio de informacion entre medios diferentes y tecnológias que inicialmente son incompatibles.

Sockets

Los sockets son puntos finales de enlaces de comunicaciones entre procesos. Los procesos los tratan como descriptores de ficheros, de forma que se pueden intercambiar datos con otros procesos transmitiendo y recibiendo a través de sockets.

El tipo de sockets describe la forma en la que se transfiere información a través de ese socket.

Sockets Stream (TCP, Transport Control Protocol ).- Son un servicio orientado a conexión donde los datos se transfieren sin encuadrarlos en registros o bloques. Si se rompe la conexión entre los procesos, éstos serán informados.

El protocolo de comunicaciones con streams es un protocolo orientado a conexión, ya que para establecer una comunicación utilizando el protocolo TCP, hay que establecer en primer lugar una conexión entre un par de sockets. Mientras uno de los sockets atiende peticiones de conexión (servidor), el otro solicita una conexión (cliente). Una vez que los dos sockets estén conectados, se pueden utilizar para transmitir datos en ambas direcciones.

Sockets Datagrama (UDP, USer Datagram Protocol) .- Son un servicio de transporte sin conexión. Son más eficientes que TCP, pero no está garantizada la fiabilidad. Los datos se envían y reciben en paquetes, cuya entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envió.


Sockets Raw.- Son sockets que dan acceso directo a la capa de software de red subyacente o a protocolos de más bajo nivel. Se utilizan sobre todo para la depuración del código de los protocolos.


JVM

Una maquina virtual java es un programa nativo, es decir, ejecutable en una plataforma especifica, capaz de interpretar y ejecutar instrucciones expresadas en un codigo bianario especial, el cual es generado por el compilador Java.

La JVM es una de las piezas fundamentales de la plataforma java. Básicamente se sitúa en un nivel superior al Hardware del sistema sobre el que se pretende ejecutar la aplicación, y este actúa como un puente que entiende tanto el bytecode, como el sistema sobre el que se pretende ejecutar. Así, cuando se escribe una aplicación Java, se hace pensando que será ejecutada en una máquina virtual Java en concreto, siendo ésta la que en última instancia convierte de código bytecode a código nativo del dispositivo final.

El código binario de Java no es un lenguaje de alti nivel, sino un verdadero código de bajo nivel, viable incluso como lenguaje de entrada para un micropocesador físico. Como todas las piezas del rompecabezas Java, fue desarrollado originalmente por Sun Microsystems.

La gran ventaja de la máquina virtual java es aportar portabilidad al lenguaje de manera que desde Sun Microsystems se han creado diferentes máquinas virtuales java para diferentes arquitecturas y así un programa .class escrito en un Windows puede ser interpretado en un entorno Linux. Tan solo es necesario disponer de dicha máquina virtual para dichos entornos.

Constructores

El constructor es un tipo especifico de metodo que siempre tiene el mismo nombre que la clase y se utiliza para construir objetos de esa clase. No tiene tipo de dato especifico de retorno, ni siquiera void. Esto se debe a que el tipo especifico que debe devolver un constructor de clase es el propio tipo de la clase. En este caso, pues, no se puede especificar un tipo de retorno, ni se puede colocar ninguna sentencia que devuelva un valor. Los constructores pueden sobrecargarse, y aunque puedan contener codigo, su funcion primordial es incializar el nuevo objeto que se instancia de la clase.

Sobrecarga de Funciones

La sobrecarga se refiere a la posibilidad de tener dos o mas funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes. El compilador usará una u otra dependiendo de los parámetros usados.

  1. Sobrecarga de Métodos.- Algunos métodos en una clase pueden tener el mismo nombre. Estos métodos deben contar con diferentes argumentos. El compilador decide que método invocar comparando los argumentos. Se generara un error si los métodos solo varían en el tipo de retorno.
  • Ejemplo Articulo.java
    --------------------
    public class Articulo {
    private float precio;
    public void setPrecio() {
    precio = 3.50;
    }
    public void setPrecio(float nuevoPrecio) {
    precio = nuevoPrecio;
    }
    }

Metodos y Funciones del Objeto String

Los objetos de la clase string tiene una buena cantidad de metodos para realizar muchas cosas interesantes.

Método

Descripción

char at (indice)

Proporciona el carácter del indice especificado.

int IndexOf

Proporciona ek indice, dentro de la cadena, de la primera vez que aparece el caracter dado.

int IndexOf (String str)

Proporciona el enlace, dentro de la cadena de la primera vez que aparece el substring especificado.

int lenght ()

Devuelve la longitud de la cadena

substring(inicio,fin)

Nos da el substring que hay entre el carácter menor y el mayor.

tostring()

Se usa para convertir cadenas.

tolowercase()

Convierte a minúsculas todos los caracteres de este objeto string

touppercase()

Convierte a mayusculas todos los carácteres de este objeto string.

Clases

Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan sobre esos datos.

Un objeto (instance) es un ejemplar concreto de una clase.
Las cartacteristicas de una clase son las siguientes:

1) Todas las variables y funciones de Java deben pertenecer a una clase.
2) Si una clase deriva de otra (extends), hereda todas sus variables y métodos.
3) Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que crean los usuarios.
4) En Java no hay herencia múltiple.
5) En un fichero se pueden definir varias clases, pero en un fichero no puede haber más que una clase public.
6) Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase.
7) Los métodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this.
8) Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del fichero (package packageName;).

Tipos de Clases

Abstract.- Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia.

Final.- Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final.

Public.- Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas.

Synchronizable.- Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.

jueves, 26 de marzo de 2009

Poemitas

GRAN AMOR

Que difícil despertar y saber que ya no estas,
que el sueño terminó, que tu amor por mi ya se agotó.
No lo puedo soportar, el terror invade mi razón.

Cada segundo parece no tener final. El viento embistió, ya no sopla a
mi favor, mis lágrimas se confunden con los latidos de este GRAN AMOR.

Por que te fuiste cuando mas te necesitaba? te extrañé un poco mas que la mañana al despertar del sol, te lloré un tanto mas que el diluvio de la antiguedad.

Pasan horas, días, meses, y yo sigo aquí en un mundo de ilusión donde aun habitas tú y aunque están mas cerca las estrellas que mi piel de tu calor puedo oler tu perfume y sentir tus suaves manos.

No he podido olvidar tantos besos de pasión,
tantos ratos juntos soñando un GRAN AMOR.

Como olvidar tu ternura y tu pasión, como pretender que no te anhelo junto a mi si fuiste la única que conquistó mi corazón.

miércoles, 25 de marzo de 2009

Videos