Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   enviar un mensaje de texto de un pc a otro. (con pcs en diferentes localizaciones) (https://www.clubdelphi.com/foros/showthread.php?t=89904)

cocute 26-02-2016 11:33:24

enviar un mensaje de texto de un pc a otro. (con pcs en diferentes localizaciones)
 
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/de...etschatexample
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

Cita:

Empezado por Casimiro Notevi (Mensaje 502713)
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

Cita:

Empezado por WHILENOTEOF (Mensaje 502715)
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

Cita:

Empezado por cocute (Mensaje 502707)
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 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

Cita:

Empezado por mamcx (Mensaje 502778)
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.


La franja horaria es GMT +2. Ahora son las 10:06:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi