4,52/5
(83 opiniones)
|12480 alumnos|Fecha publicación: 07/09/2004
Un teléfono móvil es capaz de realizar conexiones con un servidor. Esto abre un vasto campo de aplicaciones y también muchas posibilidades en el campo de los juegos. Una posible aplicación puede ser un servidor que almacene las puntuaciones máximas entre todos los jugadores de un juego, o incluso la posibilidad de juego online contra otros jugadores.
En principio un MIDlet puede establecer diversos tipos de conexiones: Sockets, http, https, datagramas, y otras, sin embargo, el standard sólo obliga a la implementación del protocolo http, así que dependiendo del dispositivo dispondremos de unos tipos de conexiones u otras. Para mantener la compatibilidad es aconsejable utilizar las basadas en el protocolo http y, por lo tanto, limitarnos a este tipo de conexión. La clase Connector, que se encuentra en el paquete javax.microedition.io, es la base de las comunicaciones en los MIDlets. Para abrir una conexión utilizamos el método open() de la clase Connector.
Connector.open(String conexion);
El parámetro conexión es la URL a la que queremos conectar. El
formato de la URL es el standard. Los siguientes son formatos
válidos.
http://www.dominio.com
http://www.dominio.com:8080
http://www.dominio.com/script.jsp?param1=1¶m2=2
Una forma muy estandarizada de comunicación con un servidor es
mediante llamadas a scripts escritos en JSP, PHP o cualquier otro
lenguaje de script, y pasando los parámetros necesarios, ya sea por
método post o método get. Este script procesará la información y
hará uso de ella, por ejemplo, almacenándola en una base de datos.
La escritura de scripts se escapa del ámbito de este libro, sin
embargo, podrás encontrar numerosas publicaciones sobre el tema
además de gran cantidad de información en Internet.
Además de conexiones http, podemos abrir otros tipos de conexiones siempre que nuestro teléfono móvil lo soporte.
Conexión
URL
Socket
socket: //www.dominio.com:8000
Datagramas
datagram: //www.dominio.com:8000
Archivos
file:/datos.txt
Puertos
comm:0;baudrate=9600
Una vez abierto el canal de comunicación podemos utilizar los métodos openInputStream() y openOutputStream() de la clase Connector para abrir una corriente de lectura o escritura mediante la cual, leer y escribir información.
El método openInputStream() devuelve un objeto del tipo InputStream, que representa una corriente de entrada de bytes. Contiene algunos métodos que permiten controlar la entrada de datos. Los más interesantes son:
Método
Cometido
int
available()
Número de bytes disponibles en la corriente de lectura
void
close()
Cierra la corriente
abstract int
read()
Lee el siguiente byte de la corriente
De forma similar, el método openOutputStream() devuelve un objeto de tipo OutputStream, que representa una corriente de salida de bytes. Los métodos más interesantes son:
Método
Cometido
void
close()
Cierra la corriente
void
flush()
Fuerza la salida de los bytes almacenados en el buffer
void write(byte[] b)
abstract void write(int b)
Escribe un byte o un array de bytes en la corriente de salida
Nos resta conocer la clase HttpConnection, que gestiona una conexión basada en el protocolo http. Podemos crear una conexión de este tipo mediante el método open() de la clase Connector tal y como ya vimos.
HttpConnection c =
(HttpConnection)Connector.open(url);
Algunos métodos interesantes son los siguientes:
Método
Cometido
String
getHost()
Devuelve el nombre del host remoto
int
getPort()
Devuelve el puerto de conexión
String
getQuery()
Devuelve los parámetros pasados en la URL
String getRequestMethod() Devuelve el método de
petición
int
getResponseCode() Devuelve
el código de respuesta
String getResponseMessage() Devuelve el mensaje de respuesta
String
getURL()
Devuelve la URL de la conexión
void setRequestMethod(String method) Establece el método de
petición (GET, POST o HEAD)
Para ilustrar todo durante el capítulo, vamos a desarrollar un
programa que es capaz de conectar con un servicio web y obtener
información. Nos conectaremos a una web de noticias (weblog) y
extraeremos las cabeceras de las noticias para mostrarlas en
nuestro móvil. La web que vamos a utilizar es www.barrapunto.com.
Esta web permite acceder a la información en formato XML en la URL
http://backends.barrapunto.com/barrapunto.xml,
que produce una salida como ésta (reproducimos aquí una sóla
noticia):
<?xml version="1.0" encoding="iso-8859-1" ?>
<backslash xmlns:backslash="http://barrapunto.com/backslash.dtd
">
<story>
<title>Tutorial de Secure Shell</title>
<url>http://barrapunto.com/article.pl?sid=04/01/21/1048222</url>
<time>2004-01-21 10:46:17</time>
<author>fernand0</author>
<department>ssh-scp-ssh-keygen</department>
<topic>85</topic>
<comments>36</comments>
<section>articles</section>
<image>topicseguridad.png</image>
</story>
<story>
</backslash>
Los títulos de las noticias están encerradas entre las etiquetas <title> y </title>, así que vamos a extraer el texto que se encuentre entre ambas.
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Conexion extends MIDlet {
private Display display;
// Url que vamos a consultar
String url = "http://backends.barrapunto.com/barrapunto.xml
";
public Conexion() {
display =
Display.getDisplay(this);
}
public void startApp() {
try {
verNoticias(url);
} catch (IOException e)
{}
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
void verNoticias(String url) throws
IOException {
HttpConnection c =
null;
InputStream is =
null;
StringBuffer b = new
StringBuffer();
StringBuffer salida =
new StringBuffer();
TextBox t = null;
try {
c = (HttpConnection)Connector.open(url);
c.setRequestMethod(HttpConnection.GET);
c.setRequestProperty("IF-Modified-Since", "10 Nov 2000 17:29:12
GMT");
c.setRequestProperty("User-Agent","Profile/MIDP-1.0
Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language", "es-ES");
is = c.openInputStream();
int ch, i, j;
// leer los datos desde la URL
while ((ch = is.read()) != -1) {
b.append((char) ch);
if (ch == '\n') {
if (b.toString().indexOf("<title>") > 0) {
i = b.toString().indexOf("<title>")+7;
j = b.toString().indexOf("</title>");
salida.append(b.toString().substring(i,j));
salida.append("\n-------------------\n");
}
b.delete(0,b.length());
}
}
// mostrar noticias en la pantalla
t = new TextBox("Noticias en barrapunto.com", salida.toString(),
1024, 0);
} finally {
if(is!= null) {
is.close();
}
if(c != null) {
c.close();
}
}
display.setCurrent(t);
}
}
Hay 83 opiniones. Opina sobre este curso.
| Cursos | Valoración | Alumnos | Vídeo | |
|---|---|---|---|---|
|
Funciones en C (primera parte) Curso de programacíon informática sobre Funciones en C en el orden de los fundamentos de la programación. Comprende el desarrollo de un software utilizando funciones y a ... [17/10/08] |
|
2.816 | ||
|
Procesos en C. Sincronización (primera parte) Curso de informática sobre sincronización de procesos en C y señales en linux que te ofrece la posibilidad de comprender los mecanismos de comunicación entre procesos inf... [21/10/08] |
|
993 | ||
|
Java Java nació con el deseo por parte de Sun de buscar un lenguaje de programación enfocado a electrodomésticos. Se necesitaba alg&uacu... [23/04/04] |
|
49.291 | ||
Publicar en
del.icio.us
digg
meneame