lunes, 31 de diciembre de 2007

"Serialización" en J2ME

Antes de que acabase el año, he querido experimentar el tema de la "Serialización" de objetos en J2ME.

Antes de nada, el proceso de serialización, consiste en convertir, objetos, variables... en una cadena de Bytes.

De esta forma, en el servidor, podría componer un objeto "Usuario" por ejemplo, con toda la información de tal persona (numero de móvil, nombre, dirección bluetooth, dirección Ip...) serializarlo y enviarlo al dispositivo móvil. Una vez recibido en el cliente, lo "des-serializamos" y obtenemos el mismo objeto original. Muy útil para envío de estructuras complejas entre dispositivos.

La serialización, por desgracia, no está implementada para J2ME, así que he tenido que hacer un arreglillo, siguiendo los pasos de este "Consejo".

He realizado las pruebas pertinentes, y he recibido correctamente el objeto. Esto abre nuevas puertas y nuevas ideas...

Un saludo y feliz año.

domingo, 30 de diciembre de 2007

El servidor responde

Como comentaba en el último post.

Una vez consultada la base de datos en el servidor (el portatil), este le responde al móvil la información requerida. En este caso la dirección bluetooth del dispositivo que estamos buscando.

Lo próximo será enviar un objeto completo con toda la información del usuario, usando "Serialización". El problema es que para J2ME no existe esta funcionalidad y habrá que implementar algo por el estilo.

Ya os contaré como va el tema.

domingo, 23 de diciembre de 2007

J2ME+Bluetooth+J2SE+MySql

Todo unido, casi a la perfección.

Sigo retocando un poco el código y mejorando el cliente, lo que tengo ahora mismo es una prueba, todavía no está implementado en el "JSend".

Veamos algunos pedazos de códigos interesantes.

En la parte del cliente (J2ME)

conn = (StreamConnection) Connector.open(connString);

donde "connString" es algo parecido a esto:

"btspp://0009DD506CE7:1" (Dirección del dispositivo bluetooth al que queremos conectarnos, y su canal (1).

una vez abierta la conexion creamos el objeto de salida:

output = conn.openOutputStream();

y enviamos los datos por el flujo de salida

byte[] datos = this.mensaje.getBytes();
output.write(datos);

En el servidor (J2SE):

Activamos el dispositivo bluetooth:

local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);

Creamos la dirección del "servidor" donde UUID_STRING es un número hexadecimal de 32 bits y NOMBRE_SERVICIO un nombre identificativo que queramos.

String url = "btspp://localhost:" + UUID_STRING + ";name="
+ NOMBRE_SERVICIO;

Abrimos la conexión y esperamos las "llamadas" entrantes.

server = (StreamConnectionNotifier) Connector.open(url);

StreamConnection conn = server.acceptAndOpen();

Abrimos el flujo de lectura

InputStream is = conn.openInputStream();

volcamos el buffer de lectura en una variable "buffer" de tipo byte... y a leer!!

int numChars = is.read(buffer);


Utilidad:

Desde el movil, enviamos al servidor el teléfono del amigo al que queramos enviarle el archivo/foto. El servidor lo recibe y busca en la base de datos (como comentaba en post más abajo) toda la información de ese número de teléfono.

Solo me queda la fase de "respuesta del servidor al móvil"...

En el siguiente capítulo más!!!!

jueves, 20 de diciembre de 2007

Conexión exitosa

Como ya os he ido comentando en mis anteriores post, mi intención era conectar Java con MySql.

La idea "ambiciosa" es:

Desde el móvil, consultar datos existentes en la base de datos del PC. A través del bluetooth, envío, por ejemplo el número de teléfono, y el ordenador me devuelve por ejemplo la dirección bluetooth (si existe) de ese móvil.

Ya tengo la parte del servidor, ya obtengo información de la base de datos. Ahora falta comunicar el movil con el PC y obtener respuesta del mismo.

lunes, 17 de diciembre de 2007

MySql Administrator

Después de instalar el MySql Administrator, el administrador de base de datos mysql (Como bien dice el nombre).

Una vez conseguida la conexión al servidor local y haber probado un par de tablas, me encuentro con el siguiente problema a la hora de alterar algunas tablas:

error Nr.1064


Buscando por internet he encontrado la solución. El programilla tiene un pequeño "bug", y es que en el caso que no introduzcamos la longitud del campo (varchar(20), por ejemplo) nos da ese pete...

Solución: Meterle un valor de longitud al campo en particular. Y solucionado!!!

MySql Server.

Bueno, he vuelto, después de varias semanas de desaparición proyectil, vuelvo a la carga.

Esta vez le estoy metiendo mano al servidor que irá alojado en mi portatil. La idea es crear una base de datos pequeña, con información sobre usuarios, sus teléfonos...y desde el móvil acceder a ella.

Por lo pronto estoy instalando en MySql en el cacharro este. (Recordemos que estamos en Linux)

Pasos que estoy siguiendo:

-Instalar los paquetes "myslq-server" y "mysql-client".

-Instalar un entorno "MySql Administrator", para una gestión de las tablas mucho más fácil e intuitiva.

-Configurar el netbeans para que me pille la base de datos y poder hacer pruebas.

Por lo pronto los pasos 1 y 2 ya están completos, voy a empezar a juguetear un poco con esto a ver si me encuentro algún problema...(espero que no).

Actualización:

Acabo de conectar el Netbeans con la base de datos:

El Netbeans 6.0 ya tiene incluido el driver de conexión con la BD, así que solo hay que seleccionar la dirección de la máquina a la que hay que conectarse (localhost:3306) el usuario y la contraseña...

Y ya tengo conexión.

Yeah!!