Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 02/05/13, 19:38:56
Avatar de javi9375
javi9375 javi9375 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: mar 2011
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
arg ¿Mejor tecnologia para una app de chat sencilla?

Buenas, tengo que realizar una aplicación de chat sencilla para una práctica de clase. El objetivo de la práctica es que realicemos una aplicación Android en la que intervenga una comunicación con un servidor hecho por nosotros. Llevo dos o tres días investigando la técnologia con la que lo haremos y no me queda muy claro. He encontrado dos opciones:
- Usar XMPP: Según lo que leo es el protocolo que usan la mayoria de aplicaciones de chat, pero le encuentro dos problemas. El primero es que al usar un API tanto para el cliente como para el servidor, el API nos quita casi todo el trabajo de la conexión por lo que el objetivo de la practica no acaba de cumplirse. Y lo segundo es que la API que he encontrado para el cliente (aSMACK) parece un poco "no oficial" por lo que no se tampoco si será adecuado para una práctica de la Universidad.
- Usar POSTs de HttpServlet, con XMLs definidos por nosotros: esta solución es más cutre y complicada pero creo que cumplimos mejor con los objetivos de la práctica. El problema que tenemos con esto es que a la hora de mandar un mensaje de un usuario a otro, dado que el HttpServlet solo envia respuestas (o eso creemos por que no hemos trabajado mucho con ellos), habría que hacer Polling en el cliente y nos consumiria bastante. ¿Hay alguna otra forma de hacer esto con httpservlets, un servidor de presencia o callback o algo?

¿Se os ocurre alguna otra forma de realizar la comunicación?
Responder Con Cita


  #2  
Viejo 02/05/13, 19:47:11
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Si es sencilla y para una práctica de clase lo suyo es que uses lo que te han enseñado. Si habéis dado servlets, servlets, si habéis dado sockets TCP pues sockets, no creo que hayáis dado XMPP o SIP...

Con servlets y haciendo polling parece adecuado y sencillo para una versión básica. La bidireccionalidad en HTTP se puede conseguir con técnicas como COMET, long polling, web sockets, etc...
Responder Con Cita
  #3  
Viejo 03/05/13, 09:21:31
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Yo por jugar un poco con Web Sockets hice una especie de IRC, y funcionaba bastante bien y es bastante sencillo de realizar usando esa tecnología.
Responder Con Cita
  #4  
Viejo 04/05/13, 20:16:09
Avatar de javi9375
javi9375 javi9375 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: mar 2011
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Vale, pues me informare un poco de como van los Web Sockets y si no me convence lo haré como me comenta mocelet. Gracias a los dos!
Responder Con Cita
  #5  
Viejo 05/05/13, 16:05:11
Avatar de rinxe
rinxe rinxe no está en línea
Miembro del foro
Mensajes: 260
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Versión de ROM: LineageOS 14.1
Versión de Radio: Los 40
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
Este tema a mi me interesa (comentar que no tengo ningun conocimiento sobre estos temas). Por mas que he investigado en internete sobre estos temas, no me queda muy clara la cosa.

Necesito conectar 2 dispositivos a traves de internet, ya sea por wifi o 3g. Y que esa comunicacion sea bidireccional, que se manden stream del uno al otro, mientras estan jugando.

He investigado un poco los web sockets y he visualizado algun ejemplo, pero a la hora de conectarlos no me aclaro mucho y no se realmente si sera una buena practica.

Os agradeceria un poco de ayuda o algo de info para ir tirando
Responder Con Cita
  #6  
Viejo 05/05/13, 16:29:09
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Se puede hacer usando simplemente sockets entre los móviles, pero lo ideal es hacerlo con un servidor intermedio, más que nada porque con 3G la IP es muy cambiante.

En cuanto a la parte móvil usando WebSockets es bastante sencilla, yo uso AutobahnAndroid, y lo único que tienes que hacer es iniciar la clase poniendo la dirección del servidor y programar un listener para cuando recibes paquetes (si miras la documentación verás que es muy sencilla). Luego para enviar paquetes se hace también con una función. Y ya está. En muy pocas líneas de código tienes funcionando los WebSockets en el móvil.

En cuanto a la parte web es más complicado, yo lo hice con PHP usando una librerías de WebSockets y me quedó muy chapucero y muy mal. Lo ideal es usar NodeJS.
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 05/05/13, 17:52:29
Avatar de rinxe
rinxe rinxe no está en línea
Miembro del foro
Mensajes: 260
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Versión de ROM: LineageOS 14.1
Versión de Radio: Los 40
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
Estoy haciendo unas pruebas esta tarde y hasta que no consiga comunicacion entre ellos no paro, jejej.

En principio estoy creando un socket que escucha y un socket que envia un texto. Pero el socket cliente me da nullpointerexception al mandar el texto.

Socket Servidor:
Código:
class CommsThread implements Runnable {
    public void run() {
        ss = null;
        try {
            ss = new ServerSocket(SERVERPORT);
            ss.setSoTimeout(10000);
		        
	    //accept connections
	    Socket s = ss.accept();
	    BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
		        
	     //receive a message
	     String incomingMsg = in.readLine() + System.getProperty("line.separator");
	     tv.setText("received: " + incomingMsg);

              s.close();
        } catch (InterruptedIOException e) {
	      Log.d("ERROR1", e.toString());
	} catch (IOException e) {
	      Log.d("ERROR2", e.toString());
	}
    }
}
Socket Cliente:
Código:
class CommsThread implements Runnable {
    public void run() {
        try {
            socket = new Socket("www.luisalbes.com", SERVERPORT);
            out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        } catch (UnknownHostException e) {
            Log.d("ERROR1", e.toString());
	} catch (IOException e) {
	    Log.d("ERROR2", e.toString());
	 }   
    }
}
Para enviar uso un Boton que recoge un EditText:
Código:
enviar.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        try {
	    EditText et = (EditText) findViewById(R.id.edit);Log.d("PRUEBA", "PRIMERO");
	    String str = et.getText().toString();Log.d("PRUEBA", "SEGUNDO");
	    out.write(str);Log.d("PRUEBA", "TERCERO");
	    out.flush();Log.d("PRUEBA", "CUARTO");
	               
	    socket.close();
	    } catch (UnknownHostException e) {
	        tv.setText("Error1");
	    } catch (IOException e) {
	        tv.setText("Error2");
	    } catch (Exception e) {
	        tv.setText("Error3");
	        Log.d("error", e.toString());
	    }
        }
});

En principio la conexion no se si la hago bien, uso mi dominio "www.luisalbes.com". De esta manera no me da ninguna execpcion de conexion.

El error lo tengo en "Log.d("PRUEBA", "TERCERO");" ahi me lanza la excepcion " Log.d("error", e.toString());"

EDITADO: el problema lo tengo en el dominio, creo que no conecta por ser dominio con hosting incluido y no se se habra opcion de convertirlo en servidor o hacer algo con este dominio.

Última edición por rinxe Día 05/05/13 a las 18:19:51
Responder Con Cita
  #8  
Viejo 05/05/13, 19:16:36
Avatar de javi9375
javi9375 javi9375 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: mar 2011
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
rinxe siento no poder ayudarte mucho en tu tema, solo he usado sockets un par de veces y no me acuerdo muy bien, aunque como tecnologia a usar posiblemente sea lo mejor para lo que quieres hacer.

Volviendo a mi tema, creo que usare POST de hhtpservlets pa alos Web Sockets no estan soportados o tienen soporte experimental. La parte del servidor la tengo bastante clara, pero en el cliente no tengo muy claro el diseño que deberia realizar, esto es lo que tengo pensado:
- Para peticiones que respondan a botones tipo hacer login, enviar un mensaje a otro usuario etc, crear hilos dentro de la función que se llame al pusar el boton indicado (ya sea el de login o el de enviar mensaje) para que haga una peticion POST al servidor.
- Para hacer polling para recibir mensajes de otros usuarios o del servidor, tengo algo más de duda. ¿Sería mejor crear un hilo dentro del activity que sea que haga las peticiones al servidor cada cierto tiempo o sería más recomendable crear el hilo dentro de un Service ?. No he trabajado con Services pero supongo que esto me servira para que siga funcionando independientemente de la activity en la que me encuentro ¿o me equivoco?
Responder Con Cita
  #9  
Viejo 05/05/13, 19:37:57
Avatar de rinxe
rinxe rinxe no está en línea
Miembro del foro
Mensajes: 260
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Versión de ROM: LineageOS 14.1
Versión de Radio: Los 40
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por javi9375 Ver Mensaje
rinxe siento no poder ayudarte mucho en tu tema, solo he usado sockets un par de veces y no me acuerdo muy bien, aunque como tecnologia a usar posiblemente sea lo mejor para lo que quieres hacer.
Nada no te preocupes, ya te digo que he mirado muchos ejemplos y la teoria me la se, pero esque las comunicaciones en Android las veo complicadas al no saber absolutamente nada. Si me pueden hechar media mano los cracks que tenemos por aqui me sobra y perdona por irrumpir asi en el tema pero mas o menos lo veia relacionado

PD: creo que mi solucion es encontrar la manera de hacer de mi dominio un servidor o directamente un servidor. Haber si hablo mañana con el amiguete que lleva los temas web y me puede hacer algo el.

Última edición por rinxe Día 05/05/13 a las 19:44:48
Responder Con Cita
  #10  
Viejo 07/05/13, 13:24:23
Avatar de rinxe
rinxe rinxe no está en línea
Miembro del foro
Mensajes: 260
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Versión de ROM: LineageOS 14.1
Versión de Radio: Los 40
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
Aun no he podido hablar con el amiguete, no lo he pillado en la tienda estos dias. Tengo dudas respecto a como tiene que ser el servidor, en todos sitios pintan muy bien los sockets pero nadie habla del servidor por ningun lado. Por lo que he leido tiene que ser un servidor dedicado o virtual. Apache en este caso no se si servira, esque no me merece la pena pagar un servidor con lo que cuestan pal poco uso que le voy a dar, si pudiera montarme algo aqui en el ubuntu estaria bien. Con los sockets para lo que quiero creo que me sobra.

Por lo demas creo que ya se todo el funcionamiento de los sockets y websockets estoy en las mismas, me he empapado de mucha lectura pero me falla la parte del servidor.

Y para javi9375, respecto al segundo punto a mi me parece buena la idea, no he tocado servicios aun pero lo suyo es que reciba los mensajes aunque no estes en la activity.
Responder Con Cita
  #11  
Viejo 10/05/13, 13:03:26
Avatar de rinxe
rinxe rinxe no está en línea
Miembro del foro
Mensajes: 260
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Versión de ROM: LineageOS 14.1
Versión de Radio: Los 40
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
Ayer consegui contactar con el servidor casero que he instalado a traves de Websockets y la libreria AutobahnAndroid. Con los sockets no hubo manera y ayer saque la conclusion de que necesitaba un programa en el servidor. Tambien he visto el funcionamiento de los servlets y sus posibilidades.

Ahora no tengo claro si quiero sockets o websockets, la parte web igual no se como la hare, jejejej. Haber si hablo con este amigo mio que no a habido manera esta semana y haber como lo montamos.

PD: Gracias por la info KriogenN, me a costado comprender esto pero por finnn
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 03:14:10 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007