martes, 27 de abril de 2010

Iniciación a J2ME Parte IV

J2ME y redes
MIDP presenta una implementación del protocolo HTTP, que puede ser usada para realizar conexiones a internet y redes usando TCP/IP y protocolos que no usan IP, como WAP o I-mode usando un gateway que facilita su acceso a servidores http.
Gracias al CLDC Generic Connection Framework, MIDP soporta la tecnología cliente/servidor y el uso de datagrams. Desafortunadamente MIDP 1.0 solo implementa el protocolo HTTP 1.1. Aunque el telefono pueda usar sockets, MIDP 1.0 no tiene esta opción, así que habría que desarrollar nuestra propia clase. La versión MIDP 2.0 contiene una implementación de sockets y datagrams.
El uso de sockets y datagrams, hace que nuestra aplicación sea menos portable ya que no todas redes y teléfonos hace uso de ellos, así que es especialmente recomendable evitar su uso. 
XML y PHP pueden ser usados para encapsular información y acceder a ella usando HTTP request.

Generic Connection Framework
Generis Connecition Framework hace uso de la clase Connector para abrir o crear una conexión a Internet:
o) HTTP
Connection hc = Connector.open("http://www.todosymbian.com")
o) Socket:
Connection sc = Connector.open("socket://localhost:9000")
o) Datagram
Connection dc = Connector.open("datagram://http:// www.todosymbian.com:9000")
o) Puerto Serie:
Connection cc = Connector.open("comm:0;baudrate=9000")
o) Fichero I/O:
Connection fc = Connector.open("file:/archivo.dat")
Como se ha indicado antes, MIDP 1.0 solo implementa el protocolo HTTP. Ademas, SDKs como el the SUN no permiten el uso de los otros tipos de comunicación. Para cambiar esta opcion, hay que crear una variable de ambiente:
ENABLE_CLDC_PROTOCOLS=INTUITIVE_TOOLKIT
No he probado todavía si esto es todavía asi en el nuevo SDK que soporta MIDP 2.0

HttpConnection
HttpConnection implementa el protocolo HTTP
1.1
Una vez creada una conexión a HTTP, esta puede tener 3 estados:
  • Setup

    • La conexión todavía no ha sido realizada

    • Llama a los metodos setRequestMethod()
      (POST, GET o HEAD) y setRequestProperty()
  • Connected

    • La conexión se ha realizado con éxito y se espera una respuesta.

    • El cambio de estado Setup a Connected se puede producir debido a cualquiera de estos
      métodos


      • openInputStream()
      • openDataInputStream()
      • openOutputStream()
      • openDataOutputStream()
      • oetLength()
      • oetType()
      • oetEncoding()
      • getDate()
      • getExpiration()
      • getLastModified()
      • getHeaderField()
      • getHeaderFieldKey()
      • getResponseCode()
      • getResponseMessage()
      • getHeaderFieldInt()
      • getHeaderFieldDate()
  • Closed


    • La conexion se ha cerrado, si se produce el uso de cualquier método, IOException dará un
      error.
Los siguientes metodos se pueden usar en cualquiera de los tres estados
  • close()
  • getRequestMethod()
  • getRequestProperty()
  • getURL()
  • getProtocol()
  • getHost()
  • getFile()
  • getRef()
  • getPort()
  • getQuery()
Metodos de peticion
Hemos dicho que los métodos de petición pueden ser GET, HEAD y POST.
o) GET se usa para obtener información de Internet de una URL determinada.
o) HEAD proporciona información sobre una pagina Web.
o) POST enviá información a Internet, normalmente a un programa CGI, de hecho GET también puede ser usado para mandar información en variables insertadas en la URL, en cambio POST enviá la información en forma de un stream.
Pulsa en los enlaces para conseguir un ejemplo sobre la petición.
Ejemplos
Los ejemplos anteriores muestran como realizar GET, HEAD y POST peticiones, es posible que sea necesario cambiar las URLs usadas, pero deberían dar al lector una ayuda de cómo usar estas peticiones.
Otros ejemplos:
o) HttpMIDlet: consigue el contenido de un archivo en Internet.
o) SendMail: manda un email a través de un servidor de email. Se necesita las APIs Java Mail que pueden ser bajadas de SUN web site.
Redes y MIDP 2.0
Otras tecnologías
Además de usar J2ME, podemos usar otros lenguajes combinándolos con J2ME. Aquí simplemente veremos un par de ejemplos de cómo combinar J2ME con PHP y con J2SE.
J2SE and SERVlet
SERVlet es un programa que corre en un servidor. Básicamente es como un programa CGI pero en Java. Para hacer que un SERVlet funcione en el servidor, necesitarás instalar un programa, por ejemplo, si el servidor es un Apache, en su Web tiene un programa llamado Tomcat. Pero eso es otra historia.
En el apartado de redes, hemos visto que con el método GET se pueden mandar variables insertadas en la URL. Esta es la forma que el SERVlet usa para recibir información, y luego enviá una respuesta al MIDlet.
Como ejemplo, el programa que enviá un email en la parte de redes, lo tenemos ahora en versión SERVlet. El MIDlet enviá el cuerpo del mensaje y email al SERVlet, y este se encarga de contactar con el servidor de email
Es necesario cambiar el nombre de los archivos y dejar solo el SendMail.java
PHP
Exactamente lo mismo pasa con PHP, podemos usar el método GET y enviar información para hacer algo en el programa PHP.
Ejemplos
o) GetPHP hace uso de GET para obtener una respuesta del programa PHP.
o) GetImage, envía datos binarios, como una imagen, o un PDF y si el telefono puede ver este tipo de datos, lo abrirá.

1 comentario:

  1. ok, es facil de realiazae aplicaciones... coaultas a : sandtiago@h.

    ResponderEliminar