Mensajería BETA 1.0

Ir abajo

Mensajería BETA 1.0

Mensaje  Admin (Viruz) el Miér Ene 09, 2013 3:53 am

En esta ocasión traigo un programa de mensajería que se encuentra en versión BETA pero realiza el funcionamiento que les deseo enseñar y se trata de una mensajería instantánea como Messenger por poner algún ejemplo, aunque me faltan opciones para integrar a la interfaz al menos lo que se desea funciona correctamente y ya podrán descargarlo.

Para ello se debe conocer un poco de las clases que se utilizarán en este programa, pero antes se dará un repaso de lo que se ha apreciado últimamente en primero se aprendió a obtener la dirección IP de alguna pagina y junto con ella el LocalHost de nuestra maquina para ello se utilizo la clase InetAddress el cual se puede consultar mas abajo la API, después se realizo un Servidor TCP el cual se ocupaba de Java.net dos clases nuevas Socket y ServerSocket (Esto añadiéndole los flujos de entrada y salida Buffered de java.io) y por último el cliente TCP en el cual se ocuparon 2 de las anteriores mencionadas para realizar la conexión.

Lo que se necesita conocer
Ahora se verán 2 clases nuevas (de Java.net) estas son DatagramSocket y DatagramPacket, la primera representa un socket para enviar y recibir paquetes de datagramas.

¿Que es un Datagrama?
Hay dos formas de encaminar los paquetes en una red. Estas son: datagrama y circuito virtual. En la técnica de datagrama cada paquete se trata de forma independiente, conteniendo cada uno la dirección de destino. (Fuente: Wikipedia)
Y la segunda representa un paquete datagrama, estos se utilizan para implementar un servicio de entrega de paquetes sin conexión. Cada mensaje se envía de una máquina a otra basada exclusivamente en la información contenida dentro de ese paquete.

Para ver un resumen podemos ver esta imagen que me encontré en Internet de lo que se ha visto:
[Tienes que estar registrado y conectado para ver esa imagen]
Ahora después de comprender un poco mejor las clases con las que se maneja Java.net pasamos a lo mas importante el funcionamiento del programa junto con su código, para ello iré paso a paso explicando.

¿Como funciona el programa?

1. Empezando por el servidor se declara un DatagramSocket y en el constructor se crea una instancia dentro de un try - catch.

public class VentanaServidor extends javax.swing.JFrame {
private DatagramSocket socket;
/**
* Creates new form VentanaServidor
*/
public VentanaServidor() {
initComponents();

try {
socket = new DatagramSocket( 5000 );
} catch ( SocketException excepcionSocket ) {
System.exit( 1 );
}
}

2. El programa solo cuenta con 2 métodos y un evento de un JTextField, en el primer método llamado esperarPaquetesCliente() se encuentra un ciclo while()
que estará iterando infinitamente se crea un arreglo de byte[] que irán de 100 en 100 obteniendo el mensaje y se instancia la segunda clase mencionada DatagramPacket en el que como se ve en la API se pasan 2 parámetros un arreglo de byte[] y el tamaño que tendrá el DatagramPacket.

Ahora mediante el método receive() se recibe el mensaje que manda el cliente es decir se para el identificador del objeto creado y después se pasa el mensaje al segundo método mostrarMensaje() en el cual con getData() regresamos un buffer de datos y con getLength() devuelve la longitud de los datos que se envían o la longitud de los datos recibidos.

public void esperarPaquetesCliente() {
while (true) {
try {
byte datos[] = new byte[ 100 ];
DatagramPacket recibirPaquete = new DatagramPacket( datos, datos.length );

socket.receive( recibirPaquete );

mostrarMensaje("\nCliente dice: "+ "\n" + new String
(recibirPaquete.getData(), 0, recibirPaquete.getLength()) + "\n");
} catch ( IOException excepcionES ) {
mostrarMensaje( excepcionES.toString() + "\n" );
}
}
}

3. En el segundo método es un hilo el cual se encargará de desplegar el mensaje junto con la ubicación y el tamaño del texto completo.

private void mostrarMensaje( final String mensajeAMostrar ) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jTextAreaServidor.append( mensajeAMostrar );
jTextAreaServidor.setCaretPosition(
jTextAreaServidor.getText().length() );
}
}
);
}

4. Toca el turno del evento (actionPerfomed) de la etiqueta de texto que es donde se escribe el mensaje primero se declara un String (cadena de texto) y se obtiene el mensaje que se escribe en el JTextField con el método getActionCommand() ahora se le asigna a un arreglo de bytes[] el String con el método getBytes. Diferente a cuando se recibe se crea un objeto de DatagramPacket pero se pasarán 4 parámetros en ves de 2:

Arreglo de bytes, longuitud, la dirección IP (InetAddress), dirección del Socket (SocketAddress).
Listo ya por último se cambia el método para enviar en ves de receive() es send().

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
jTextAreaServidor.append("\nServidor dice: " + "\n" +
evt.getActionCommand() + "\n" );

String mensaje = evt.getActionCommand();
byte datos[] = mensaje.getBytes();

DatagramPacket enviarPaquete = new DatagramPacket( datos,
datos.length, InetAddress.getLocalHost(), 63160 );

socket.send( enviarPaquete );

jTextAreaServidor.setCaretPosition(
jTextAreaServidor.getText().length() );
jTextField1.setText("");
} catch ( IOException excepcionES ) {
mostrarMensaje( excepcionES.toString() + "\n" );
}
}

Vídeo

[Tienes que estar registrado y conectado para ver este vínculo]

Descarga el código
[Tienes que estar registrado y conectado para ver este vínculo]

Autor: Viruz study
Enlace:[Tienes que estar registrado y conectado para ver este vínculo]

_________________
[Tienes que estar registrado y conectado para ver esa imagen]
avatar
Admin (Viruz)
Admin

Mensajes : 148
Fecha de inscripción : 23/09/2012
Edad : 30
Localización : Desktop

http://viruz.foroactivo.mx

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.