B4A en español - Juan Antonio Villalpando
(BASIC4Android)
-- Tutorial de B4A --
Volver al índice del tutorial
____________________________
70.- Servidor web.
- B4a dispone de una biblioteca llamada HttpServer para poder convertir a nuestro disposivo en un servidor web.
- Podemos ver un tutorial y bajar la biblioteca desde la web oficial.
- La biblioteca consta de dos archivos: HttpServer.jar y HttpServer.xml que debemos copiar en la carpeta donde tenemos instalado el programa, en mi caso C:\Archivos de programa\Anywhere Software\Basic4android\Libraries
- Luego debemos activar la librería HttpServer en la pestaña Libs (abajo-derecha del IDE)
- También debemos establecer un puerto mayor que el 1024, en el ejemplo he puesto el 3333
- Un vez en funcionamiento, desde otro dispositivo debemos entrar en su navegador y escribir la IP del servidor y el puerto,
por ejemplo: 192.168.1.4:3333 (esto suponiendo que hemos instalado el servidor web en nuestro móvil y queremos verlo funcionar desde otro dispositivo de nuestra red local, suponiendo que la ip local del móvil es 192.168.1.4 y que estamos trabajando con wifi)
- Si queremos ver como funciona nuestro servidor web instalado en nuestro emulador, desde el mismo emulador escribiremos en el Navegador del emulador
10.0.2.15:3333
- Es conveniente que nuestro servidor web funcione como Servicio, es decir, lo lanzamos mediante una aplicación y aunque ésta pase a segundo plano, nuestro servidor seguirá funcionando.
_______________
- Código.
Copia y pega este código en un nuevo proyecto |
#Region Module Attributes
#FullScreen: False
#IncludeTitle: True
#ApplicationLabel: Servidor Web
#VersionCode: 1
#VersionName:
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
Sub Process_Globals
End Sub
Sub Globals
Dim boton As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
' Crea Botón (Button)
boton.Initialize("boton")
boton.TextColor = Colors.Red
boton.Text = "Arrancar el servidor"
Activity.AddView(boton, 0dip, 10dip, 100%x, 10%y)
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub boton_Click
StartService(servicio)
' StopService(servicio)
End Sub
|
Ahora debemos crear el servicio, para ello pulsamos en...
Project / Add New Module / Service Module
y lo llamamos servicio.
Copia y pega este código en el módulo servicio |
#Region Module Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
Private server As HttpServer
Public port As Int = 3333
' Dim ip As String
End Sub
Sub Service_Create
server.Initialize("Server")
server.Start(port)
' Notificación
Dim n As Notification
n.Initialize
n.Icon = "icon"
n.SetInfo("Servidor web funcionando", "", Main)
Service.StartForeground(1, n)
End Sub
Sub Service_Start (StartingIntent As Intent)
End Sub
Sub Service_Destroy
' server.Stop
' Service.StopForeground(1)
End Sub
Sub Server_HandleRequest(Request As ServletRequest, Response As ServletResponse)
' Aquí se realiza la petición, podemos enviar un mensaje, una redirección, un archivo...
' Response.SendString("Hola, soy el servidor web.")
' Response.SendRedirect("http://www.kio4.com")
' ip = Request.RemoteAddress
' Response.SendString("IP = " & ip)
Response.SendFile(File.DirAssets, "index_web.htm")
End Sub
|
- En la carpeta Files del proyecto guarda el siguiente archivo: index_web.htm. (botón derecho copiar)
- Ejecutamos nuestra aplicación, pulsamos el botón para activar el Servicio web. Observamos que sale una notificación.
- Vamos a la pantalla de inicio. Ejecutamos el Navegador web. Escribimos en dirección: 10.0.2.15:3333 y cuando el servidor reciba esta llamada nos responderá con la subrutina Server_HandleRequest que enviará el archivo index_web.htm que se encuentra en la carpeta Files.
- Como dije antes si lo queremos probar en un móvil real y mediante wifi en una red local, debemos saber qué IP tiene asignada el móvil, por ejemplo 192.168.1.4:3333 y desde otro dispositivo, ordenador con wifi,... entrar en el servidor web del móvil.
_______________________________________
- ¿Cómo podemos saber la IP del emulador?
Eso ya lo vimos en el tutorial dedicado a LINUX.
En Windows, vamos al Símbolo de sistema, paro ello escribimos cmd en "Buscar programas y archivos" del botón de inicio.
Luego vamos a la carpeta donde hemos instalado el SDK.
cd C:\Android\android-sdk\platform-tools
y escribimos
adb -s emulator-5554 shell ifconfig eth0
donde 5554 es el número del emulador.
Debe salir algo así:
C:\Android\android-sdk\platform-tools>adb -s emulator-5554 shell ifconfig eth0
eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast]
La IP del emulador es 10.2.0.15
Para entrar en nuestro servidor web debemos entrar en el navegador y escribir:
10.2.0.15:3333
_______________________________________________
- Otro ejemplo más completo del servidor web
- De los foros podemos bajar el ejemplo: HttpServerExample.zip,
- Lo bajamos y lo ejecutamos...
- Pulsamos el botón de Start Server y ya tenemos el servidor en funcionamiento. Lo podemos confirmar mirando el Log.
- Vamos a la pantalla de inicio. Ejecutamos el Navegador Web y escribimos la dirección:
10.0.2.15:5555
(esta vez el puerto es el 5555, si lo probamos en un móvil real en wifi pondremos su IP 192.168.1.4:5555)
En el casillero Greeting podemos escribir un mensaje que luego lo podemos ver en la línea Greeting, cuando veamos la página de inicio. |
Aqui vemos la página de inicio, en Greeting saldrá el mensaje escrito en el casillero al Arrancar el servidor. |
- Si pulsamos en
List external storage files
Nos saldrá un listado de los archivos y directorios que tienes en la SdCard y un botón para subir archivos al servidor.
- Si estamos en una red local, por ejemplo en nuestra casa, en vez de poner la IP del emulador (10.0.2.15), tendremos que poner la IP que nuestro Wifi le ha asignado a nuestro teléfono móvil. por ejemplo 192.168.1.6.
- Desde cualquier ordenador de nuestra red local podemos conectarnos a este servidor web instalado en nuestro teléfono móvil. |
- Si queremos personalizar una página web, la pondremos en nuestra carpeta Files del proyecto.
Si te sale este error: Address already in use, significa que ya hay un servidor trabajando en esa dirección IP.
Puedes parar ese servidor o simplemente vas al código y cambia el puerto... en mi caso lo he cambiado a 5556.
________________________________________
- Parar un servicio, desinstalar un programa.
En el programa que lanza el servicio podemos poner un botón de parada de Servicio.
Sub boton_parar_Click
StopService(servicio)
End Sub
También podemos parar un servicio pulsando en los iconos de...
Settings (Configuración) / Applications / y
luego en Running services o en Manage applications para desinstalarlo.
También podemos poner un código de parada en el icono de notificación. |
|
____________________
- Otros ejemplos.
En la misma página del foro encontramos dos ejemplos más de servidor web...
HttpServer_Chat.zip
HttpServerDB.zip
- Nuestro servidor web que hemos instalado en el móvil solo funciona en red local, pero podemos darnos de alta en no-ip.com para que se puedan conectar a nuestro servidor desde cualquier parte de internet, siguendo lo que se indica en este tutorial.
________________________________
|