Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java...

39
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-1 Introducción a Java con JavaME Sesión 3: Excepciones, hilos, acceso a la red

Transcript of Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java...

Page 1: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-1

Introducción a Java con JavaME

Sesión 3: Excepciones, hilos, acceso a la red

Page 2: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-2

Puntos a tratar

• Excepciones• Captura y propagación de excepciones• Nested exceptions• Hilos y sincronización• Acceso a la red con JavaME• Marco de conexiones genéricas, http• Envío y recepepción de datos• SMS

Page 3: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-3

Tratamiento de errores en Java

• Excepción: Evento que sucede durante la ejecución del programa y que hace que éste salga de su flujo normal de ejecución• Se lanzan cuando sucede un error• Se pueden capturar para tratar el error

• Son una forma elegante para tratar los errores en Java• Separa el código normal del programa del código para

tratar errores.

Page 4: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-4

Jerarquía

Page 5: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-5

Tipos de excepciones• Checked: Derivadas de Exception

• Es obligatorio capturarlas o declarar que pueden ser lanzadas

• Se utilizan normalmente para errores que pueden ocurrir durante la ejecución de un programa, normalmente debidos a factores externos

• P.ej. Formato de fichero incorrecto, error leyendo disco, etc

• Unchecked: Derivadas de RuntimeException• Excepciones que pueden ocurrir en cualquier fragmento de código

• No hace falta capturarlas (es opcional)

• Se utilizan normalmente para errores graves en la lógica de un programa, que no deberían ocurrir

• P.ej. Puntero a null, fuera de los límites de un array,etc

Page 6: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-6

Creación de excepciones

• Podemos crear cualquier nueva excepción creando una clase que herede de Exception (checked), RuntimeException (unchecked) o de cualquier subclase de las anteriores.

public class MiExcepcion extends Exception {

public MiExcepcion (String mensaje) {

super(mensaje);

}

}

Page 7: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-7

try { // Código regular del programa

// Puede producir excepciones

} catch(TipoDeExcepcion1 e1) { // Código que trata las excepciones de tipo

// TipoDeExcepcion1 o subclases de ella.

// Los datos sobre la excepción los encontraremos

// en el objeto e1.

...

} catch(TipoDeExcepcionN eN) { // Código que trata las excepciones de tipo

// TipoDeExcepcionN o subclases de ella.

} finally { // Código de finalización (opcional)

}

try-catch-finally

Page 8: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-8

Ejemplos

int [] hist = leeHistograma();try { for(int i=1;;i++) hist[i] += hist[i-1];} catch(ArrayOutOfBoundsException e) { System.out.println(“Error: “ + e.getMessage());}

int [] hist = leeHistograma();try { for(int i=1;;i++) hist[i] += hist[i-1];} catch(Exception e) { System.out.println(“Error: “ + e.getMessage());}

Sólo captura ArrayOutOfBoundsException

Captura cualquier excepción

Page 9: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-9

• Mensaje de error

String msg = e.getMessage();

• Traza

e.printStackTrace();

• Cada tipo concreto de excepción ofrece información especializada para el error que representa• P.ej. ParseException ofrece el número de la línea del fichero

donde ha encontrado el error

Información sobre la excepción

Page 10: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-10

• Para lanzar una excepción debemos• Crear el objeto correspondiente a la excepción

Exception e = new ParseException(mensaje,linea);

• Lanzar la excepción con una instrucción throw

throw e;

• Si la excepción es checked, declarar que el método puede lanzarla con throws

public void leeFichero() throws ParseException {

...

throw new ParseException(mensaje, linea);

...

}

Lanzar una excepción

Page 11: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-11

Capturar o propagar• Si un método lanza una excepción checked deberemos

• Declarar que puede ser lanzada para propagarla al método llamador

public void init() throws ParseException { leeFichero();}

• O capturarla para que deje de propagarse

try { leeFichero();} catch(ParseException e) { System.out.println(“Error en linea “ + e.getOffset() + “: “ + e.getMessage());}

• Si es unchecked• Se propaga al método llamante sin declarar que puede ser lanzada• Parará de propagarse cuando sea capturada• Si ningún método la captura, la aplicación terminará automáticamente

mostrándose la traza del error producido

Page 12: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-12

Nested exceptions

• Captura excepción causante

• Lanza excepción propia

try {

...

} catch(IOException e) {

throw new MiExcepcion("Mensaje de error", e);

}

• Encadena errores producidos. Facilita depuración.

• Información detallada del error concreto.

• Aislar al llamador de la implementación concreta.

Page 13: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-13

Hilos en Java y JavaMe Permiten realizar múltiples tareas al mismo tiempo Cada hilo es un flujo de ejecución independiente

» Tiene su propio contador de programa

Todos acceden al mismo espacio de memoria» Necesidad de sincronizar cuando se accede concurrentemente a

los recursos

Se pueden crear de dos formas:» Heredando de Thread» Problema: No hay herencia múltiple en Java» Implementando Runnable

Debemos crear sólo los hilos necesarios» Dar respuesta a más de un evento simultáneamente» Permitir que la aplicación responda mientras está ocupada» Aprovechar máquinas con varios procesadores

Page 14: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-14

Heredando de Thread

• Heredar de Thread y sobrecargar run( )public class MiHilo extends Thread { public void run() { // Codigo de la tarea a ejecutar en el hilo }}

• Instanciar el hiloThread t = new Thread(new MiHilo());

t.start();

Page 15: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-15

Implementando de Runnable

• Implementar Runnablepublic class MiHilo implements Runnable {

public void run() {

// Codigo de la tarea a ejecutar en el hilo

}

}

• Instanciar el hiloThread t = new Thread(new MiHilo());

t.start();

Page 16: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-16

Ciclo de vida de los hilos

El hilo será no ejecutable cuando:• Se encuentre durmiendo (llamando a sleep)

• Se encuentre bloqueado (con wait)

• Se encuentre bloqueado en una petición de E/S

Page 17: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-17

Scheduler

El scheduler decide qué hilo ejecutable ocupa el procesador en cada instante

Se sacará un hilo del procesador cuando:

• Se fuerce la salida (llamando a yield)• Un hilo de mayor prioridad se haga ejecutable• Se agote el quantum del hilo

Establecemos la prioridad con t.setPriority(prioridad);

• La prioridad es un valor entero entre

Thread.MIN_PRIORITY y Thread.MAX_PRIORITY

Page 18: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-18

Concurrencia y sección crítica

Cuando varios hilos acceden a un mismo recurso pueden producirse problemas de concurrencia

Sección crítica: Trozo del código que puede producir problemas de concurrencia

Debemos sincronizar el acceso a estos recursos• Este código no debe ser ejecutado por más de un hilo

simultáneamente

Todo objeto Java (Object) tiene una variable cerrojo que se utiliza para indicar si ya hay un hilo en la sección crítica • Los bloques de código synchronized utilizarán este

cerrojo para evitar que los ejecute más de un hilo

Page 19: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-19

Métodos sincronizados

• Sincronzar un método o una sección de códigopublic synchronized void seccion_critica() {

// Codigo

}

• Se utiliza el cerrojo del objeto en el que se definen• Se podrán ejecutar por un sólo hilo en un instante

dado.

Page 20: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-20

Uso de la sincronización

Deberemos utilizar la sincronización sólo cuando sea necesario, ya que reduce la eficiencia

No sincronizar métodos que contienen un gran número de operaciones que no necesitan sincronización• Reorganizar en varios métodos

No sincronizar clases que proporcionen datos fundamentales• Dejar que el usuario decida cuando sincronizarlas

en sus propias clases

Page 21: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-21

Bloqueo de hilos

• Si el hilo va a esperar a que suceda un evento (por ejemplo, terminar una E/S), hay que bloquearlo para que no ocupe el procesador:

wait();

• Cuando suceda el evento debemos desbloquearlo desde otro hilo con:

notify();

• Ambos métodos deben ser invocados desde métodos sincronizados

Page 22: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-22

Dependencia de hilos

• Podemos esperar a que un hilo haya acabado de ejecutarse para poder continuar otro hilo

• Para ello bloquearemos el hilo actual que debe esperar a otro hilo t con:

t.join();

Page 23: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-23

Acceso a la red en Java ME

GCF = Generic Connection Framework Marco de conexiones genéricas, en javax.microedition.io Permite establecer conexiones de red independientemente del

tipo de red del móvil (circuitos virtuales, paquetes, etc) Cualquier tipo conexión se establece con un único

método genérico

Connection con = Connector.open(url);

Según la URL podemos establecer distintos tipos de conexiones

http://www.jtech.ua.es/ HTTPdatagram://192.168.0.4:6666 Datagramassocket://192.168.0.4:4444 Socketscomm:0;baudrate=9600 Puerto seriefile:/fichero.txt Ficheros

Page 24: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-24

Tipos de conexiones

En CLDC se implementan conexiones genéricas En MIDP y APIs opcionales se implementan los protocolos concretos

Page 25: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-25

Conexión HTTP

El único protocolo que se nos asegura que funcione en todos los móviles es HTTP Funcionará siempre de la misma forma, independientemente del

tipo de red que haya por debajo

Page 26: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-26

Leer de una URL

Abrimos una conexión con la URLHttpConnection con = (HttpConnection)Connector.open( "http://jtech.ua.es/index.htm");

Abrimos un flujo de entrada de la conexiónInputStream in = con.openInputStream();

Podremos leer el contenido de la URL utilizando este flujo de entradaPor ejemplo, en caso de ser un documento HTML,

leeremos su código HTML Cerramos la conexiónin.close();con.close();

Page 27: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-27

Mensaje de petición

Podemos utilizar distintos métodosHttpConnection.GETHttpConnection.POSTHttpConnection.HEAD

Para establecer el método utilizaremos:

con.setRequestMethod(HttpConnection.GET);

Podemos añadir cabeceras HTTP a la petición

con.setRequestProperty(nombre, valor);

Por ejemplo:

c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");

Page 28: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-28

Mensaje de respuesta

A parte de leer el contenido de la respuesta, podemos obtenerCódigo de estado

int cod = con.getResponseCode();

String msg = con.getResponseMessage();

Cabeceras de la respuesta

String valor = con.getHeaderField(nombre);

Tenemos métodos específicos para cabeceras estándar

getLength()getType()getLastModified()

Page 29: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-29

Enviar datos

Utilizar parámetros GET o POSTParejas <nombre, valor>

HttpConnection con = (HttpConnection)Connector.open(

"http://jtech.ua.es/registra?nombre=Pedro&edad=23");

No será útil para enviar estructuras complejas de datos

Añadir los datos al bloque de contenido de la peticiónDeberemos decidir la codificación a utilizarPor ejemplo, podemos codificar en binario con DataOutputStream

Page 30: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-30

Tipos de contenido

Para enviar datos en el bloque de contenido debemos especificar el tipo MIME de estos datosLo establecemos mediante la cabecera Content-Type

con.setRequestProperty("Content-Type", "text/plain");

Por ejemplo, podemos usar los siguientes tipos:

application/x-www-form-urlencoded Formulario POST

text/plain Texto ASCII

application/octet-stream Datos binarios

Page 31: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-31

Codificación de los datos

Podemos codificar los datos a enviar en binarioEstablecemos el tipo MIME adecuado

con.setRequestProperty("Content-Type", "application/octet-stream");

Utilizaremos un objeto DataOutputStream

DataOutputStream dos = con.openDataOutputStream();dos.writeUTF(nombre);dos.writeInt(edad);dos.flush();

Si hemos definido serialización para los objetos, podemos utilizarla para enviarlos por la red

Page 32: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-32

Leer datos de la respuesta

Contenido de la respuesta HTTPNo sólo se puede utilizar HTMLEl servidor puede devolver contenido de cualquier tipoPor ejemplo, XML, ASCII, binario, etc

Si el servidor nos devuelve datos binarios, podemos descodificarlos mediante DataInputStream

DataInputStream dis = con.openDataInputStream();String nombre = dis.readUTF();int precio = dis.readInt();dis.close();

Podría devolver objetos serializadosDeberíamos deserializalos con el método adecuado

Page 33: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-33

Conexiones a bajo nivel

A partir de MIDP 2.0 se incorporan a la especificación conexiones de bajo nivelSocketsDatagramas

Nos permitirán aprovechar las características de las nuevas redes de telefonía móvil

Podremos acceder a distintos servicios de Internet directamentePor ejemplo correo electrónico

Su implementación es optativa en los dispositivos MIDP 2.0Depende de cada fabricante

Page 34: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-34

Sockets

Establecer una comunicación por socketsSocketConnection sc = (SocketConnection)

Connector.open("socket://host:puerto");

Abrir flujos de E/S para comunicarnos InputStream in = sc.openInputStream();

OutputStream out = sc.openOutputStream();

Podemos crear un socket servidor y recibir conexiones entrantes

ServerSocketConnection ssc = (ServerSocketConnection)

Connector.open("socket://:puerto");

SocketConnection sc =

(SocketConnection) ssc.acceptAndOpen();

Page 35: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-35

Datagramas

Crear conexión por datagramas

DatagramConnection dc = (DatagramConnection)

Connector.open("datagram://host:puerto");

Crear un enviar paquete de datos

Datagram dg = dc.newDatagram(datos, datos.length);

dc.send(dg);

Recibir paquete de datos

Datagram dg = dc.newDatagram(longitud);

dc.receive(dg);

Page 36: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-36

Conexión de mensajes

Con WMA podremos crear conexiones para enviar y recibir mensajes de texto SMS

Utilizaremos una URL como

sms://telefono:[puerto]

Creamos la conexión

MessageConnection mc = (MessageConnection)

Connector.open("sms://+34555000000");

Page 37: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-37

Envío de mensajes

Componemos el mensaje

String texto =

"Este es un mensaje corto de texto";

TextMessage msg = mc.newMessage(mc.TEXT_MESSAGE);

msg.setPayloadText(texto);

El mensaje no deberá pasar de 140 bytesSi se excede, podría ser fraccionadoSi no puede ser fraccionado, obtendremos un error

Enviamos el mensaje

mc.send(msg);

Page 38: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-38

Recepción de mensajes

Creamos conexión de mensajes entrantes

MessageConnection mc = (MessageConnection)

Connector.open("sms://:4444");

Recibimos el mensaje

Message msg = mc.receive();

Esto nos bloqueará hasta la recepciónPara evitar estar bloqueados, podemos utilizar un

listenerCon un MessageListener se nos notificará de la llegada

de mensajes

Page 39: Introducción a Java con JavaME · 2011. 12. 14. · » Problema: No hay herencia múltiple en Java » Implementando Runnable Debemos crear sólo los hilos necesarios » Dar respuesta

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Introducción a Java con JavaME © 2011-2012 Depto. Ciencia de la Computación e IA Excepciones, hilos red-39

¿Preguntas...?