PDA

Ver la Versión Completa : enviar un mensaje de texto de un pc a otro. (con pcs en diferentes localizaciones)


cocute
26-02-2016, 11:33:24
Hola cual creeis que sería el mejor modo de enviar un mensaje de texto de un pc a otro desde una app delphi,
he probado con un cliente/servideor TCP y va bien:
http://www.delphibasics.info/home/delphibasicssnippets/simpletcpsocketschatexample
pero claro está el inconveniente de que hay que poner la ip del servidor y tener el puerto abierto en el router del servidor y puede ser un poco de lio para el que lo use.
O puedo poner algún puerto que no haga falta abrirlo?
Es que pruebo conectandome en el mismo pc con los dos programas cliente/servidor poniendo mi ip de internet en el cliente pero si no abro puerto no va.

Otra cosa se me ocurre es crear un cliente de correo eléctrónico y enviar por email el mensaje. No se si esto sería mejor.

gracias

Casimiro Notevi
26-02-2016, 11:55:48
Envias un email, es lo más simple :)

cocute
26-02-2016, 12:04:18
pero claro con el email el cliente recibiría todos los mensajes de su cuenta de email y no sólo el que le envías.

tiene que haber algún modo de hacerlo con sockets pero que no haya que abrir puertos.

Casimiro Notevi
26-02-2016, 12:11:19
Bueno, tampoco has explicado en detalle qué necesitas y para qué.
Para recibir mensajes, lo más cómodo y simple es un email, abre una cuenta de google específica para ello y tan solo recibirá los mensajes que vayan a esa cuenta, ninguna más.
No sé, algo como mensajes.de.chat@google.com y así no mezclas emails privados ni de nadie más.
Pero, ya digo, depende de lo que quieras obtener, de los requerimientos del proyecto.

WHILENOTEOF
26-02-2016, 12:59:38
Yo tengo implementada esa funcionalidad empleando los eventos que se generan en una base de datos Firebird. Tengo una tabla de mensajes y cuando se inserta un registro se genera un evento que reciben los cllientes, cuando recibo ese evento en un cliente chequeo la tabla para ver si el mensaje le corresponde a ese cliente, y en caso afirmativo lo leo y se lo muestro en el programa. Esto te evita hacer otras configuraciones de IP y puertos, al margen de las que haces en una instalación cliente servidor con Firebird.

cocute
26-02-2016, 13:20:35
Bueno, tampoco has explicado en detalle qué necesitas y para qué.
Para recibir mensajes, lo más cómodo y simple es un email, abre una cuenta de google específica para ello y tan solo recibirá los mensajes que vayan a esa cuenta, ninguna más.
No sé, algo como mensajes.de.chat@google.com y así no mezclas emails privados ni de nadie más.
Pero, ya digo, depende de lo que quieras obtener, de los requerimientos del proyecto.
pero ya obligas a que el que use el programa se cree una cuenta de correo nueva.

cocute
26-02-2016, 13:21:25
Yo tengo implementada esa funcionalidad empleando los eventos que se generan en una base de datos Firebird. Tengo una tabla de mensajes y cuando se inserta un registro se genera un evento que reciben los cllientes, cuando recibo ese evento en un cliente chequeo la tabla para ver si el mensaje le corresponde a ese cliente, y en caso afirmativo lo leo y se lo muestro en el programa. Esto te evita hacer otras configuraciones de IP y puertos, al margen de las que haces en una instalación cliente servidor con Firebird.
si, eso sería otra solución, pero ya dependes de tener alojada una base de datos en un servidor.

mamcx
26-02-2016, 16:39:23
pero claro está el inconveniente de que hay que poner la ip del servidor y tener el puerto abierto en el router del servidor y puede ser un poco de lio para el que lo use.


Todo viaja por algun puerto, si o si.

Ahora, la manera mas simple posible es usando un servicio como https://www.pubnub.com/ (la capa gratuita da para bastante).

De ahi, si es en una red local, usando UDP. Si es por internet necesitas una direccion (usar un protocolo P2P es mas complicado). Puedes hacer como hace pubnub y similares y tener un servidor que hace la retransmision de los mensajes. Los clientes usan una direccion como "www.miretransmisor.com" y ese usando HTTP (que todos tendran el puerto 80 abierto) y un ID de cliente se encarga de coordinar todo. Ahora, en tal caso es mejor si usas un software especializado que te medie todo eso (como pubnub). Podria servirte usar REDIS como mediador, o ZeroMQ o cualquier apps especializada en coordinar mensajes (busca "Message Broker" en google)

cocute
26-02-2016, 16:57:53
y no podría usar lo de enviarlo por sockets por el puerto 80 o por algún puerto que siempre esté abierto.
(aunque he probado y me da error)

mamcx
27-02-2016, 00:13:53
Podrias.

Pero el puerto 80 tiene privilegios precisamente para evitar que lo "robe" un programa en cualquier momento y arruine la navegacion y otras cosas. Asi que tendria que tener permisos de administrador.

Si el envio de mensajes es casual, usa email. Si necesitas algo mas, usa un servicio como pubnub (en serio!). Si quieres hacerlo todo tu, usa ZeroMQ (http://zeromq.org/) u similar.

Hacerlo a mano con Sockets (tcp o udp o similar) es mucho mas complicado (y con errores que seguro cometeras si no tienes experiencia) que usar ZeroMQ o similar.

No hay camino *mas facil* que usar correo y/o usar un servicio que de lo que quieres, como pubnub. De ahi en adelante, es como te hemos dicho y no hay forma de hacerlo "trivial" sin que haya pero aqui o pero alla...

cocute
27-02-2016, 15:39:28
y si el que usa el programa no está navegando en ese momento serviría pues el puerto 80?
Es que lo del email lo veo más lio.

lo que quiero es pasar las coordenadas gps de un pc a otro, y que el programa destino interprete esas coordenadas.

Casi prefiero que tenga que abrir puertos que no lo de los emails.

mamcx
27-02-2016, 16:22:38
Parece que te resistes: Quieres facil y sencillo? Usa pubnub (o similar). Mejor no lo haras ni a palos.

Sin abrir puertos solo podrias con un servidor HTTP que coordine. NO LE BUSQUES MAS que estas son tus opciones tal como pintas la cosa.

cocute
28-02-2016, 16:07:56
Parece que te resistes: Quieres facil y sencillo? Usa pubnub (o similar). Mejor no lo haras ni a palos.

Sin abrir puertos solo podrias con un servidor HTTP que coordine. NO LE BUSQUES MAS que estas son tus opciones tal como pintas la cosa.

Gracias,seguramente esa sea buena opción,
pero es que eso de pubnun tu lo ves muy fácil, pero yo entro ahí me creo una cuenta pero no se como se integra eso,
miro en documentación y hay muchos lenguajes pero no salen apps Delphi de ejemplo
https://www.pubnub.com/documentation/
imagino que va todo enviando enlaces en el navegador pero no me termino de enterar como va

mamcx
28-02-2016, 16:41:25
Usando la interface rest se puede integrar con casi todos los APIs:

https://www.pubnub.com/http-rest-push-api/

Eso es haciendo POST / GET, etc con cualquier libreria como synapse o indy. Es cosa de mirar el API e implementar lo necesario.

P.D: Pubnub no es el unico servicio de este tipo. Hay muchos otros que te pueden servir.