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

Respuesta
 
Herramientas
  #1  
Viejo 02/05/13, 19:38:56
Array

[xs_avatar]
javi9375 javi9375 no está en línea
Usuario novato en la web
 
Fecha de registro: mar 2011
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
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
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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...
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 03/05/13, 09:21:31
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
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
Array

[xs_avatar]
javi9375 javi9375 no está en línea
Usuario novato en la web
 
Fecha de registro: mar 2011
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
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
Array

[xs_avatar]
rinxe rinxe no está en línea
Miembro del foro
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Tu operador: Yoigo
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
__________________
Visita mi blog: EL BAUL DE ANDROID
Responder Con Cita
  #6  
Viejo 05/05/13, 16:29:09
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
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
Array

[xs_avatar]
rinxe rinxe no está en línea
Miembro del foro
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Tu operador: Yoigo
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.
__________________
Visita mi blog: EL BAUL DE ANDROID

Ú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
Array

[xs_avatar]
javi9375 javi9375 no está en línea
Usuario novato en la web
 
Fecha de registro: mar 2011
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
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
Array

[xs_avatar]
rinxe rinxe no está en línea
Miembro del foro
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Tu operador: Yoigo
 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.
__________________
Visita mi blog: EL BAUL DE ANDROID

Ú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
Array

[xs_avatar]
rinxe rinxe no está en línea
Miembro del foro
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Tu operador: Yoigo
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.
__________________
Visita mi blog: EL BAUL DE ANDROID
Responder Con Cita
  #11  
Viejo 10/05/13, 13:03:26
Array

[xs_avatar]
rinxe rinxe no está en línea
Miembro del foro
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Tu operador: Yoigo
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
__________________
Visita mi blog: EL BAUL DE ANDROID
Responder Con Cita
Respuesta

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



Hora actual: 03:59:15 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /