Ads 468x60px

Perfil

jueves, 29 de mayo de 2014

Sockets en Android

imagenposts  Hola lectores el dia de hoy veremos como utilizar sockets en Android, como crearlos, enviar y recibir datos. Antes de empezar es necesario saber lo que es un socket pueden leer el sig. articulo. Básicamente lo que haremos hoy es una aplicacion ‘cliente’  para android que se conectara mediante un socket usando el protocolo TCP a una aplicaciòn ‘servidor’ escrita en JAVA J2SE, esta app nos permitira enviar datos al servidor y desde este le podremos dar un uso a estos. A continuaciĂłn podrán ver como es el diagrama en una Comunicacion entre un cliente y un servidor.  Como veran primero se establece la coneccion, luego  el servidor  espera a que los clientes se conecten, una vez ya conectados uno hace una peticion y obtiene una respuesta hasta hacen esto hasta que la coneccion se corta. Nosotros trataremos de hacer lo mismo. En nuestro caso la app cliente estara en un dispositivo con android que se conectara mediante Wi-Fi a un router en el cual tambien esta conectada la  computadora que correra la aplicacion servidor al estar hecho en java podra correr en cualquier sistema operativo.  En android el manejo de sockets por lo menos con  TCP es igual que en java. Cuando trabajamos con sockets podemos usar el tipo  Socket en el cliente y en el servidor uno o más objetos Socket asociados a un ServerSocket. La E/S se realiza a travĂ©s de objetos InputStream y OutputStream asociados a los Sockets. Lado  Servidor:En el servidor debemos hacer lo sig.
  • Crear el socket servidor
  • Aceptar un cliente
  • Obtener los InputStream y/o OutputStream del cliente.
  • Crear unos InputStream y/o OutputStream más adecuados a nuestras necesidades.
  • Leer y escribir datos del y al cliente.
  • Cerrar el socket.
En el servidor se crea un serversocket que tiene como parametro el numero de puerto este puede ser del 1 a 65535  del 1 a 1023 están reservados para servicios del sistema (SSH,SMTP, ftp, mail, www, telnet, etc…) Del 1024 en adelante podemos usarlos a nuestro gusto. Crear el socket servidor: El servidor crea un socket servidor que tiene como parámetro el puerto en el que a va estar escuchando las peticiones entrantes en mi caso he usado el 5555: ServerSocket skServidor = new ServerSocket(5555); Cada servidor debe usar un puerto diferente. Aceptar un cliente: Una vez creado el servidor, este espera conexiones de los cliente para eso llamamos al mĂ©todo accept(). Este mĂ©todo se queda bloqueado hasta que algĂşn cliente se conecta. Nos devuelve un Socket, que es la conexiĂłn con dicho cliente. Socket skCliente = skServidor.accept();Un servidor puede manejar multiples conexion con cliente pero en este caso solamente manejara una.

Obtener el InputStream y/o OutputStream

Una vez que el cliente ya esta conectado, debemos  obtener de Ă©l el OuputStream o InputStream con los mĂ©todosgetOutputStream() o getInputStream(). La clase OutpuStream nos sirve para enviar datos.  InputStream nos sirve para leer los datos recibidos. InputStream input = skCliente.getIntputStream(); OutputStream output = skCliente.getOutputStream();Estos metodos Ăşnicamente envĂ­an bytes. Si vamos a utilizar tipos de datos normales (enteros, String) podemos utilizar las clases DataInputStream y DataOutputStream. Estas clases tienen un constructor que admite unInputStream y un OutputStream respectivamente. DataInputStream inputdata = new DataInputStream (input); DataOuputStream outputdata = new DataOutputStream (output); Estas clases tienen sus propios metodos para escribir o leer. como writeInt(),writeFloat()readInt(), etc. Para strings usaremos los mĂ©todos writeUTF() y readUTF(), que envĂ­an/leen las cadenas en formato UTF.
Tambien podemos enviar y recibir objetos, en nuestra aplicacion crearemos nuestro objeto Mensaje_data
Para poder leer o escribir deberemos usar los metodos  readObject() y writeObject() de ObjectInputStream y ObjectOutputStream.
Para poder usar estos mĂ©todos las clases que enviemos deben implementar la interface Serializable.
Lado Cliente: Para poder crear el socket usamos la clase ‘Socket’ ademas deberemos usar la Direccion IP del server y el puerto que empleara para la comunicacion Socket skCliente = new Socket (IP,PUERTO); IP debe ser u String y PUERTO un entero.Podemos ver todo esto en el sig. diagrama.
 Veremos mas de esto en el codigo de la aplicacion.
De momento nuestra app solamente enviara mensajes al servidor osea que la comunicacion sera en un solo sentido veremos como hacerla
‘bidireccional en otro turial’
Una vez ya visto la parte teorica manos a la obra.
La app de android se vera asi le di un diseño parecido al tablero de una maquinaria para que sea mas agradable y divertido.
Captura de la app
Tendrá unos campos al comienzo en donde deberemos ingresar la direccion ip del server y el puerto,unos leds que cambiaran de color segun el estado de la conexion y un texto en el medio que informara cuando halla un error, luego mas abajo hay un campo en el que le podemos enviar un texto al servidor y luego de bajo cuatro botones de acciĂłn a los cuales desde el servidor podremos asignarle que cada vez que se los pulse realizar en el server una accion diferente como ejecutar un script, abrir una aplicacion etc, con esto podriamos usar nuestro movil como un control remoto para la pc. Veremos primero el codigo de la aplicacion servidor. He utilizado Eclipse para escribir el codigo en el repositorio encontraran el codigo. El proyecto del servidor se llama SimpleServer-Socket He  creado una clase que se llama Mensaje_data por lo que los ‘mensajes’ que se enviaran seran de este tipo, esta clase estara presente en las 2 aplicaciones  Mensaje_data  Este tiene los siguiente atributos.
  • Action :
llamare  mensaje de accion al mensaje que debe  tener en este atributo un valor difernte al -1 y estar comprendido entre 1 y 4. Cada valor tendra una accion especifica diferente, estos se definira mas abajo. last_msg debe ser false
  • Texto:
Llamare mensaje de texto al mensaje que tenga de valor action -1 y en texto debera tener lo que se desea enviar al server. last_msg debe ser false.
  • Ultimo mensaje:
Sera el mensaje que se envira para avisarle al servidor que debe cortar la conexion, se enviara al presionar desconectar. action=-1 texto=” ” last_msg=true Server.javaserver1Algunas aclaraciones, En el metodo Exec  podremos hacer varias cosas ejucar un script abrir un pdf, un HTML, recomiendo visitar los siguientes link1 , link2  para mayor comprension. En este caso al presionar el boton de accion 1 abrira VLC,  en el numero 2 Chrome y en el 3 una terminal esto lo he hecho usando linux, en este punto dependera del sistema operativo que esten utilizando, si no ponemos el path del ejecutable, el directorio en el que se encuentra debe estar en la variable de entorno PATH, si no, no sabrá dĂłnde econtrar el ejecutable.   Ahora es el turno de la aplicacion para android, recomiendo leer el comentario en cada caso: Proyecto:proyecto eclipseAl  AndroidManifest.xml y al layout en  layout/main no los voy a mostrar pueden verlos directamente desde el repositorio. Sockettest.java Explicare el funcionamiento paso a paso comentando en cada lineas. codigo droidcodigo droid2Como habran  visto el funcionamiento es muy simple y no hay nada de mayor complejidad. para poder ejecutar el codigo java sin utilizar el eclipse deberan ejecutar desde su interprete de comandos segun el os que usen javac server.java y luego java server despues deberian ejecutar la app de android. Pueden ver un video sobre el funcionamiento de la aplicacion:

Pueden descargar el codigo de este tutorial desde nuestro repositorio haciendo click en la imagen debajo. El proyecto de la aplicacion servidor se llama “SimpleServer-Socket” La aplicacion cliente “Socket-Client

martes, 27 de mayo de 2014

Iniciar los servicios de WampServer al iniciar Windows

Para iniciar wampserver automaticamente al iniciar windows deben seguir los pasos a continuaciĂłn:
1.- Ingresa a: Inicio → Panel de control
2.- Ingresa a: “Herramientas administrativas”.
3.- Ingresa a: “Servicios”.
4.- Busca el servicio “wampapache” e ingresa en el mismo.
5.- En “Tipo de inicio” selecciona la opciĂłn “Automático” y dale click al botĂłn “Aceptar”.
6.- RepĂ­te los pasos 4 y 5 pero esta vez con el servicio “wampmysqld”.
Listo! Con esto los servicios deseados iniciarán automáticamente junto con el arranque del sistema operativo!

martes, 20 de mayo de 2014

Añadir el JRE System Library to project en el entorno de Eclipse