Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Threads y Sockets
Objetivos:
Temas: 7.1 Introduccin al desarrollo con Thread. 7.2 Aplicaciones con Thread. 7.3 Sockets Stream. 7.4 Crear el socket servidor. 7.5 Aceptar un cliente. 7.6 Leer y escribir datos del y al cliente.
CIBERTEC
Captulo 7
Java Fundamentals
7.1
Un thread es similar a un proceso real en el que un thread y un programa en ejecucin son un slo flujo secuencial de control. Sin embargo, un thread se considera un proceso de poco peso porque se ejecuta dentro del contexto de un programa completo y se aprovecha de los recursos asignados por ese programa y del entorno de ste. Como un flujo secuencial de control, un thread debe conseguir algunos de sus propios recursos dentro de un programa en ejecucin. (Debe tener su propia pila de ejecucin y contador de programa). El cdigo que se ejecuta dentro de un Thread trabaja slo en ste contexto.
Cuerpo del Thread Toda la accin tiene lugar en el cuerpo del thread, que es el mtodo run() del thread. Despus de crear e inicializar un thread, el sistema de ejecucin llama a su mtodo run(). El cdigo de este mtodo implementa el comportamiento para el que fue creado el thread. Es la razn de existir del thread. Frecuentemente, el mtodo run() de un thread es un bucle. Por ejemplo, un thread de animacin podra iterar a travs de un bucle y mostrar una serie de imgenes.
Estado de un Thread A lo largo de su vida, un thread tiene uno o varios estados. El estado de un thread indica qu est haciendo el thread y lo que es capaz de hacer durante su tiempo de vida: est en ejecucin?, est esperando? o est muerto?
La prioridad de un Thread Una prioridad del thread le dice al temporizador de threads de Java cuando se debe ejecutar este thread en relacin con otros threads.
Ejercicio N. 23
Para mostrar el uso de threads debe crear un proyecto y agregar a l un formulario con la siguiente presentacin:
CIBERTEC
Java Fundamentals
Entonces, programe una nueva clase Cronomentro que recibe un JLabel para actualizar el tiempo del examen y un JButton para cerrar la Ventana cuando el tiempo se acabo:
CIBERTEC
Java Fundamentals
En constructor del formulario debe instanciar e iniciar el Cronometro:
La aplicacin en ejecucin:
CIBERTEC
Java Fundamentals
Sockets Stream (TCP, Transport Control Protocol) Son un servicio orientado a conexin donde los datos se transfieren en registros o bloques. El protocolo de comunicaciones con streams es un protocolo orientado a conexin, ya que para establecer una comunicacin utilizando el protocolo TCP, hay que establecer en primer lugar una conexin entre un par de sockets. Mientras uno de los sockets atiende peticiones de conexin (servidor), el otro solicita una conexin (cliente). Una vez que los dos sockets estn conectados, se pueden utilizar para transmitir datos en ambas direcciones. Por cortesa de Para Informticos en su libro Super Java 2 for Web, tenemos esta ilustracin sobre los pasos a seguir para el proceso de comunicacin con sockets:
PC Servidor
PC Cliente
Atiende a clientes
objServer .accept()
Se conecta al Servidor
objCliente = new Socket (IP, puerto )
CIBERTEC
Java Fundamentals
Entonces a travs del puerto dado en el constructor del socket, esta estar atento a los flujos de datos que lleguen por l. El puerto puede ser el 8013, como usaremos en nuestro ejemplo posterior.
Donde IP es el nmero IP de la mquina en donde estamos intentando abrir la conexin y puerto es el puerto a travs del cual nos queremos conectar. Cuando se selecciona un nmero de puerto, se debe tener en cuenta que los puertos en el rango 0-1023 estn reservados para usuarios con muchos privilegios (superusuarios o root). Estos puertos son los que utilizan los servicios estndar del sistema como email, ftp o http. Para las aplicaciones que se desarrollen, asegurarse de seleccionar un puerto por encima del 1023. 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 quedara como: Socket objCliente; try { objCliente = new Socket(( IP, puerto ); } catch( IOException e ) { System.out.println( e ); }
CIBERTEC
Java Fundamentals
Luego de que ya tenemos el cliente, entonces por el lado del servidor, es decir para que el ServerSocket acepte un cliente, deber tener implementado el siguiente cdigo: Socket objCliente; try { objCliente = objServer.accept(); } catch( IOException e ) { System.out.println( e ); }
Mediante el mtodo accept() el servidor recoge la data del cliente como un arreglo de bytes.
La clase DataInputStream permite la lectura de lneas de texto y tipos de datos primitivos de Java de un modo altamente portable; dispone de mtodos para leer todos esos tipos como: read(), readChar(), readInt(), readDouble() y readLine(). Deberemos utilizar la funcin que creamos necesaria dependiendo del tipo de dato que esperemos recibir del servidor.
Un stream de salida para enviar informacin puede ser utilizando la clase DataOutputStream: DataOutputStream salida; try { salida = new DataOutputStream( objCliente.getOutputStream() ); } catch( IOException e ) { System.out.println( e ); }
CIBERTEC
Java Fundamentals
La clase DataOutputStream permite escribir cualquiera de los tipos primitivos de Java, muchos de sus mtodos escriben un tipo de dato primitivo en el stream de salida. De todos esos mtodos, el ms til quizs sea writeBytes().
Ejercicio N. 24
Para mostrar el uso de sockets debe crear un proyecto, con el que podremos chatear con otros alumnos, por lo tanto, agregue un formulario con la siguiente presentacin:
Deber crear la clase SocketGet, que ser la clase servidora, es decir recepcionar los mensajes que lleguen a esta PC (donde se est ejecutando la aplicacin), su cdigo es el siguiente:
CIBERTEC
Java Fundamentals
Tambin, crear la clase SocketSend, que ser la clase que enva mensajes a otras PCs a travs del IP que se escoja. Su cdigo es el siguiente:
CIBERTEC
Java Fundamentals
10
En el botn del formulario, para enviar los mensajes, digite el siguiente cdigo:
Finalmente, ejecute la aplicacin envindose un mensaje usted mismo, luego cambie el IP y envi otros mensajes a sus compaeros, pero asegurese que ellos tienen ejecutando la misma aplicacin en sus PCs.
CIBERTEC
Java Fundamentals
11
CIBERTEC