como vincular android a una LAN o crear una app para que un android sea servidor de datos?

467 views
Skip to first unread message

Leandro Jourdan

unread,
Apr 28, 2014, 3:04:16 PM4/28/14
to desarrollad...@googlegroups.com
Buenas tardes a todos! Les comento un poquito mi situacion: Hace un tiempo ya venimos desarrollando una aplicacion android para la gestion de un reparto. La aplicacion guarda todos los datos de modo local en la sdcard del dispositivo para una posterior sincronizacion de datos a la pc. La idea que tengo es realizar dicha sincronizacion sin cables por medio de wi-fi.

En concreto mi pregunta es si se puede conectar el dispositivo android a una LAN por medio de java o si en lo posible se puede crear un mini servidor de datos (al estilo una aplicacion que existe en la play store que se llama wifi file transfer)  para que luego la aplicacion de escritorio se conecte para tomar los tados.

Agradeceria muchoo su ayuda! y desde ya muchisimas gracias!

Gabriel Pozo

unread,
Apr 28, 2014, 3:12:10 PM4/28/14
to desarrollad...@googlegroups.com
Cual es el problema? Es solo una cuestión de redes, si lo podes conectar a una WAN, porque no lo podes hacer a una LAN? Usa los mismos métodos, pero vas a tener que utilizar direcciones IP fijas o dominios internos.

Por ejemplo, IP's fijas de clase C (http://es.wikipedia.org/wiki/Rangos_y_Clases_de_la_IP).
O utilizar dominios, y tener sun servidor de DNS que re-direccione internamente la cosa en tu red.


--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/13bf748d-9610-4683-b7b3-c5cb716506a6%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Saludos, Gabriel

http://aprendiendodeandroidymas.com/

Leandro Jourdan

unread,
Apr 28, 2014, 3:34:40 PM4/28/14
to desarrollad...@googlegroups.com
Hola Gabriel muchas gracias por tu respuesta, el problema es que soy nuevo en el desarrollo de aplicaciones android y no se bien por donde encarar el tema de la conexion, en concreto no se con que clases se puede lograr una conexion lan, agraderia muchisimo que me orientes un poco por donde comenzar a investigar.


El lunes, 28 de abril de 2014 16:12:10 UTC-3, Gabriel Pozo escribió:
Cual es el problema? Es solo una cuestión de redes, si lo podes conectar a una WAN, porque no lo podes hacer a una LAN? Usa los mismos métodos, pero vas a tener que utilizar direcciones IP fijas o dominios internos.

Por ejemplo, IP's fijas de clase C (http://es.wikipedia.org/wiki/Rangos_y_Clases_de_la_IP).
O utilizar dominios, y tener sun servidor de DNS que re-direccione internamente la cosa en tu red.
El 28 de abril de 2014, 16:04, Leandro Jourdan <jour...@gmail.com> escribió:
Buenas tardes a todos! Les comento un poquito mi situacion: Hace un tiempo ya venimos desarrollando una aplicacion android para la gestion de un reparto. La aplicacion guarda todos los datos de modo local en la sdcard del dispositivo para una posterior sincronizacion de datos a la pc. La idea que tengo es realizar dicha sincronizacion sin cables por medio de wi-fi.

En concreto mi pregunta es si se puede conectar el dispositivo android a una LAN por medio de java o si en lo posible se puede crear un mini servidor de datos (al estilo una aplicacion que existe en la play store que se llama wifi file transfer)  para que luego la aplicacion de escritorio se conecte para tomar los tados.

Agradeceria muchoo su ayuda! y desde ya muchisimas gracias!

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/13bf748d-9610-4683-b7b3-c5cb716506a6%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Gabriel Pozo

unread,
Apr 28, 2014, 3:47:34 PM4/28/14
to desarrollad...@googlegroups.com


Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Leandro Jourdan

unread,
Apr 28, 2014, 6:46:55 PM4/28/14
to desarrollad...@googlegroups.com
Gracias nuevamente Gabriel, pero no logro que mi dispositivo movil quede visible en la red para acceder desde una PC. Hay una aplicacion que se llama WIFI FILE TRANSFER que lo que hace es habilitar un puerto del delular para que a travez de un protocolo http se puede acceder directamente al celular. Eso es lo que yo quiero lograr dentro de mi aplicacion android. Es posible?


El lunes, 28 de abril de 2014 16:47:34 UTC-3, Gabriel Pozo escribió:
El 28 de abril de 2014, 16:34, Leandro Jourdan <jour...@gmail.com> escribió:
Hola Gabriel muchas gracias por tu respuesta, el problema es que soy nuevo en el desarrollo de aplicaciones android y no se bien por donde encarar el tema de la conexion, en concreto no se con que clases se puede lograr una conexion lan, agraderia muchisimo que me orientes un poco por donde comenzar a investigar.

El lunes, 28 de abril de 2014 16:12:10 UTC-3, Gabriel Pozo escribió:
Cual es el problema? Es solo una cuestión de redes, si lo podes conectar a una WAN, porque no lo podes hacer a una LAN? Usa los mismos métodos, pero vas a tener que utilizar direcciones IP fijas o dominios internos.

Por ejemplo, IP's fijas de clase C (http://es.wikipedia.org/wiki/Rangos_y_Clases_de_la_IP).
O utilizar dominios, y tener sun servidor de DNS que re-direccione internamente la cosa en tu red.
El 28 de abril de 2014, 16:04, Leandro Jourdan <jour...@gmail.com> escribió:
Buenas tardes a todos! Les comento un poquito mi situacion: Hace un tiempo ya venimos desarrollando una aplicacion android para la gestion de un reparto. La aplicacion guarda todos los datos de modo local en la sdcard del dispositivo para una posterior sincronizacion de datos a la pc. La idea que tengo es realizar dicha sincronizacion sin cables por medio de wi-fi.

En concreto mi pregunta es si se puede conectar el dispositivo android a una LAN por medio de java o si en lo posible se puede crear un mini servidor de datos (al estilo una aplicacion que existe en la play store que se llama wifi file transfer)  para que luego la aplicacion de escritorio se conecte para tomar los tados.

Agradeceria muchoo su ayuda! y desde ya muchisimas gracias!

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsubscr...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/13bf748d-9610-4683-b7b3-c5cb716506a6%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Jaume Tugores

unread,
Apr 29, 2014, 5:25:45 PM4/29/14
to desarrollad...@googlegroups.com
Y si en vez de ser la aplicación de escritorio que se conecta y pide los datos, porque no es la app android que se conecta y mando los datos a la aplicación de escritorio, utilizando para ello servicios webs montados sobre apache con php !!
Message has been deleted

Leandro Jourdan

unread,
May 12, 2014, 5:12:41 PM5/12/14
to desarrollad...@googlegroups.com
Buenas tarde y muchisimas gracias a todos por su tiempo! Les comento que avance bastante con la idea original del tema. Cree una clase en java que escucha un determinado puerto esperando una conexion de un cliente! esta es la clase:


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.StringTokenizer;

public final class WebServer
{
        public static void main(String argv[]) throws Exception{
            // Definir el número de puerto.
            int port = 1234;
           
            // Establecer el socket de escucha.
            ServerSocket serverSocket = new ServerSocket(port);
            System.err.println("servidor escuchando puerto: " + port);
          

            // Escucha Solicitudes de servicio HTTP Proceso en un bucle infinito.
            while (true) {
                // Escucha una petición de conexión TCP.
                Socket clientSocket = serverSocket.accept();
                System.err.println("Conexión establecida con :"+clientSocket.
getInetAddress().getHostName());
               
                // Crear un objeto de procesar el mensaje de solicitud HTTP.
                HttpRequest request = new HttpRequest(clientSocket);
               
                // crea un nuevo thread que procesa la solicitud.
                Thread thread = new Thread(request);

                // Start the thread.
                thread.start();

            }
        }
}

final class HttpRequest implements Runnable{

    final static String CRLF = "\r\n";
    Socket socket;

    // Constructor
    public HttpRequest(Socket socket) throws Exception
    {
            this.socket = socket;
    }

    // implementa el metodo run() de la interface Runnable.
    public void run(){
        try {
            processRequest();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    private void processRequest() throws Exception{
         // Obtener una referencia a los flujos de entrada y de salida del socket.
         InputStream is = socket.getInputStream();
         DataOutputStream os = new DataOutputStream(socket.getOutputStream());

         // Establecer filtros de flujo de entrada.
         BufferedReader br = new BufferedReader(new InputStreamReader(is));
        
         // Obtener la línea de petición del mensaje de solicitud HTTP.
         String requestLine = br.readLine();

         // Mostrar la línea de petición.
         System.out.println ();
         System.out.println (requestLine);
        
         //  Obtener y mostrar las líneas de cabecera.
         String headerLine = null;
         while ((headerLine = br.readLine()).length() != 0) {
                 System.out.println(headerLine);
         }
        
         // Extraer el nombre del archivo en la línea de petición.
         StringTokenizer tokens = new StringTokenizer(requestLine);
         tokens.nextToken();  // Saltar sobre el método, que debe ser "GET"
         String fileName = tokens.nextToken();

         // Anteponer un "."  por lo que la solicitud de archivo está en el directorio actual.
         fileName = "." + fileName;
        
         // Abra el archivo solicitado
         FileInputStream fis = null;
         boolean fileExists = true;
         try {
             fis = new FileInputStream(fileName);
         } catch (FileNotFoundException e) {
             fileExists = false;
         }
        
         // Construir el mensaje de respuesta.
         String statusLine = null;
         String contentTypeLine = null;
         String entityBody = null;
         if (fileExists) {
                 statusLine = "HTTP/1.1 200 OK";
                 contentTypeLine = "Content-type: " + contentType(fileName) + CRLF;
         } else {
                 statusLine = "HTTP/1.1 200 OK";
                 contentTypeLine = "Content-type: text/html";
                 entityBody = "<HTML>" + "<HEAD><TITLE>Not Found</TITLE></HEAD>" + "<BODY>Not Found</BODY></HTML>";
         }
        
         // Enviar la línea de estado.
         os.writeBytes(statusLine);

         // Enviar la línea de tipo de contenido.
         os.writeBytes(contentType(fileName));

         // Enviar una línea en blanco para indicar el final de las líneas de cabecera.
         os.writeBytes(CRLF);
        
         // Enviar el cuerpo de la entidad.
         if (fileExists) {
             
             System.err.println("ARCHIVO ENCONTRADO");
             
             sendBytes(fis, os);
             
             fis.close();
         } else {
             
             System.err.println("ARCHIVO NO ENCONTRADO");
             
             os.writeBytes(fileName);
         }
        
         // Cerrar los flujos y socket.
         os.close ();
         br.close ();
         socket.close ();
    }

    private static String contentType(String fileName)
    {
        String TipoArchivo = "";
        if(fileName.endsWith(".htm") || fileName.endsWith(".html")) {
                //return "text/html";
                TipoArchivo = "text/html";
        }
        if(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".jpe")) {
            //return "image/jpeg";
            TipoArchivo = "image/jpeg";
        }
        if(fileName.endsWith(".db") || fileName.endsWith(".sqlite")) {
            //return "image/jpeg";
            TipoArchivo = "application/x-sqlite3";
        }
        return TipoArchivo;
       
 
    }
   
    private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception
    {
            // Construye un buffer 1K bytes para contener en su camino hacia el socket.
            byte[] buffer = new byte[1024];
            int bytes = 0;

            // Copia archivo en la corriente de salida del socket.
            while((bytes = fis.read(buffer)) != -1 ) {
                    os.write(buffer, 0, bytes);
            }
           
           
        }
 
}

y a su bes desde visual fox pro realizo una peticion al dispositivo movil para traer un archivo determinado , estas son las lineas de vfp:

Local loRequest, lcUrl, lcFilename

lcUrl = "http://192.168.0.103:1234/sdcard/mi_imagen.jpg"

lcFilename = "C:\mi_imagen.jpg"

loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("GET",lcUrl,.F.)
loRequest.Send()
StrToFile(loRequest.ResponseBody,lcFilename)

La verdad que anda perfecto el funcionamiento, logro traer un archivo pero por algun motivo no puedo visualizarlo, me dice que el archivo es demaciado grande o esta dañado. Alguien tiene idea por que puede darse esto?

Esto me devuelve el logcat en este caso en puntual estoy tratando de enviar un archivo .db, pero para cualquier tipo de archivos me devuelve lo mismo

05-08 20:09:33.388: W/System.err(29865): servidor escuchando puerto: 1234
05-08 20:09:39.588: W/System.err(29865): Conexión establecida con :192.168.0.102
05-08 20:09:39.598: I/System.out(29865): GET /sdcard/sodacachito.db HTTP/1.1
05-08 20:09:39.598: I/System.out(29865): Accept: */*
05-08 20:09:39.598: I/System.out(29865): Accept-Encoding: gzip, deflate
05-08 20:09:39.598: I/System.out(29865): User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0)
05-08 20:09:39.598: I/System.out(29865): Host: 192.168.0.103:1234
05-08 20:09:39.598: I/System.out(29865): Connection: Keep-Alive
05-08 20:09:39.608: W/System.err(29865): ARCHIVO ENCONTRADO

y en el caso qçde que quiera abrir la base de datos me da este mensaje de error:

SQLiteManager: Error in opening file sodacachito.db - either the file is encrypted or corrupt
Exception Name: NS_ERROR_FILE_CORRUPTED
Exception Message: Component returned failure code: 0x8052000b (NS_ERROR_FILE_CORRUPTED) [mozIStorageService.openUnsharedDatabase]

Reply all
Reply to author
Forward
0 new messages