Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Indy+Cliente Mensajería+Ip, etc... (https://www.clubdelphi.com/foros/showthread.php?t=15847)

johncook 07-11-2004 03:25:25

Indy+Cliente Mensajería+Ip, etc...
 
Hola, que tal?
Estoy desarrollando un servicio de mensajería instantánea al estilo messenger.
Paso a explicar mas o menos la lógica de la aplicación.

1-El cliente se logue en el servidor.
2-El servidor lo valida, crea una entrada en una lista dinámica con la ip del cliente y con el mail del mismo.
3-El servidor envía al cliente la lista de sus contactos con sus respectivas direcciones Ip's.

Nota: Envía las Ip's porque la idea es que los clientes, una vez logueados, puedan conectarse directamente entre ellos, sin necesidad de generar tráfico en el servidor, además de facilitar la transferencia de archivos entre los mismos.

Paso a ejemplificar la situación a resolver:
Supongamos:

Lan 1: Pc A Lan 2: Pc B, Pc C, Pc D

Las pc's de la Lan 2 comparten una única conexión a internet. Por lo tanto la dirección Ip de las Pc's B,C y D en el servidor son las mismas.

Pc A se conecta al servidor
El servidor envía a Pc A una lista de contactos, entre los cuales figura "juancito", que está conectado en la Pc D, de la Lan 2.
Como hace Pc A, para conectarse a 'juancito' si todas las Pc's de la lan 2 comparten una única conexión a internet (ya sea a través de router o proxy)?
Otra pregunta que quería hacer, es si alguien conoce una mejor manera de que un TidTcpClient sepa que tiene datos para leer sin utilizar un Timer, ya que el mismo congela la aplicación en cuestión-
Y si no es mucho joder, podrían decirme para que sirve TidTcpIntercept?
Agradecería cualquier tipo de ayudas.
Desde ya muchas gracias.
Chau.

DarkByte 09-11-2004 08:04:25

Cita:

Empezado por johncook
Hola, que tal?

Aquí... madrugando :(
Cita:

Empezado por johncook
Estoy desarrollando un servicio de mensajería instantánea al estilo messenger

Como todos cuando empezamos con sockets ;)
Cita:

Empezado por johncook
1-El cliente se logue en el servidor.
2-El servidor lo valida, crea una entrada en una lista dinámica con la ip del cliente y con el mail del mismo.
3-El servidor envía al cliente la lista de sus contactos con sus respectivas direcciones Ip's.

Cuidado con el punto tres... asegúrate de que tienes la verdadera ip del cliente... además... si el cliente tiene router, al intentar conectarse otro usuario a el.. no podrá...
Cita:

Empezado por johncook
Nota: Envía las Ip's porque la idea es que los clientes, una vez logueados, puedan conectarse directamente entre ellos, sin necesidad de generar tráfico en el servidor, además de facilitar la transferencia de archivos entre los mismos.

El servidor tiene más tráfico... pero asi es más seguro el funcionamiento de la aplicación.

Cita:

Empezado por johncook
Como hace Pc A, para conectarse a 'juancito' si todas las Pc's de la lan 2 comparten una única conexión a internet (ya sea a través de router o proxy)?

Mmm.. ¿te has mirado bién el protocolo TCP/IP? Estás intentando hacer un coche sin haber hecho antes una bicileta.. Los pc's que están en red tienen todos la misma Ip Externa (la accesible desde internet), que es la del Router, Proxy, Firewall u ordenador que le ceda la conexión a todos. Pero además también tienen una ip intenta que los identifica DENTRO de la red. Normalmente esa ip es 192.168.1.x , donde X es el número del pc en red

Cita:

Empezado por johncook
Otra pregunta que quería hacer, es si alguien conoce una mejor manera de que un TidTcpClient sepa que tiene datos para leer sin utilizar un Timer, ya que el mismo congela la aplicación en cuestión

Yo usé un Thread o hilo de ejecución... va de perlas.
Cita:

Empezado por johncook
Y si no es mucho joder, podrían decirme para que sirve TidTcpIntercept?

Ep! ahí ya que no tengo ni idea... pero por el nombre me suena a Sniffer :p



Hasta luego!

johncook 09-11-2004 11:28:38

Bueno Darkbyte, gracias pero al fin y al cabo no me respondiste nada, solo el tema de utilizar un hilo en vez de un Timer(es lo que usaba, pero no me convencía).
Respecto al tema del TCP-IP, creo que nadie sin el conocimiento mínimo, se pondría a desarrollar una aplicación con socket's no?
Ahora seguimos nuevamente con el problema. Lo que quiero saber, es si se puede hacer o no lo que necesito. Es decir si todo lo debe manejar el servidor.
De paso voy a describir un paquete Ip, para ver si alguien me puede ayudar con eso. Básicamente tendríamos lo siguiente:
Ip Origen : Dirección Ip que genera la petición.
Puerto Origen : Puerto asignado por el router o proxy, a la Ip que genera la petición.
Ip Destino
Puerto Destino
Ahora ejemplifiquemos nuevamente la situación que anteriormente describí.
El servidor por supuesto, tiene Ip fija.
Juancito se conecta al servidor a través de un router que comparte con las otras 2 pc's de su Lan. La dirección privada de "juancito" es 192.168.0.1, mientras que la Ip pública del router es 200.43.90.12. Como el router trabaja con "sobrecarga de NAT (Network Address Translation), cuando juancito desea conectarse al servidor, el router le asigna un puerto origen, por ejemplo el 8080. Luego el router hace la petición de juancito a la Ip del servidor, pero utilizando la IP 200.13.., poniendo como puerto de origen el 8080. Como todos sabemos, el servidor responderá la petición del router por el mismo puerto que llego, es decir el 8080. Entonces el router hace el mapeo inverso. Se fija a quién asignó el puerto 8080 (juancito) y le devuelve el paquete.
Bueno, la idea es si puedo saber cual es el puerto origen de la dirección Ip que genera la conexión y, si me serviría de algo. Tengo una vaga idea de que la propiedad peerport, me serviría de algo, pero no estoy del todo seguro.
Sea bienvenida cualquier sugerencia.
Muchas gracias


La franja horaria es GMT +2. Ahora son las 11:05:50.

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