Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Problema con puertos usando Indy

Hola amigos:

Hoy me he puesto a probar el tema de sockets, puertos y demás usando Indy para la plataforma Android, pero cual es mi sorpresa que la app que genero para mi móvil no escucha ningún puerto (da igual el que le configure). Averiguo la IP pública con whatsmyip y desde el programa cliente que tengo en el PC le envío un mensaje usando idTCPClient (en el móvil uso idTCPServer) y nada, no es capaz de conectar porque dicho puerto en la IP pública en cuestión está cerrado (no responde) y recibo el error Socket error 10060, timed out.

Esto hace que me pregunte si la IP pública que recibimos en los móviles es compartida, o bien está tras un proxy con todo capado menos los puertos básicos.

¿Alguna experiencia al respecto?.

Gracias!.
Responder Con Cita
  #2  
Antiguo 09-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Actualizo:

Acabo de hacer pruebas en local (IP local) y funciona perfectamente, o sea, que mi programa cliente y servidor están perfectos.

Me quedaría saber qué está pasando con las IP públicas de los móviles, por si se les puede dar "alguna vuelta" para que reciban datos por los puertos.

Gracias!.
Responder Con Cita
  #3  
Antiguo 10-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si buscas por Internet encontrarás artículos sobre cómo conocer los puertos abiertos de tu dispositivo (la mayoría deben estar cerrados, cosa que no es de extrañar).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 10-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Gracias Neftali, pero si el puerto a usar estuviera cerrado no funcionaría tampoco con una IP local.

Estoy usando exactamente el puerto 8001, que como te digo, conectando el móvil a la Wifi de casa, responde perfectamente. Sin embargo al quitar la wifi para obtener Internet del operador, envío mensajes a su IP, puerto 8001 y nada de nada. De hecho no responde ni a los pings con la IP pública.

Me da la impresión que es una IP compartida para X terminales que estén bajo la misma antena, todo bajo un Proxy extremadamente capado.

Un saludo!!.

Edito:

Por cierto, ese artículo es para conocer los puertos abiertos del terminal, sin que ello signifique que sean puertos disponibles, es decir, que son puertos abiertos por aplicaciones. Mi propia App abre el 8001 como Unknow, y debería aparecer en esa lista usando nmap. Te lo digo porque si alguna vez se te ocurre usar un puerto de esos vas a crear un conflicto con la App que lo tenga abierto.

La única forma de mantener los puertos cerrados y sólo abrir bajo permiso es mediante reglas de Iptables. En un móvil concretamente puedes abrir por defecto el puerto que quieras.

Última edición por Fossy fecha: 10-03-2015 a las 11:34:34.
Responder Con Cita
  #5  
Antiguo 10-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Fossy Ver Mensaje
Gracias Neftali, pero si el puerto a usar estuviera cerrado no funcionaría tampoco con una IP local.
El problema es que la configuración que tú utilizas es diferente si te conectas dentro de una red local por WIFI, que si te conectas a través de internet. Los puertos por un camino y por otro son (y deben serlo) diferentes.

Es como si estuvieras entrando a la misma casa por 2 puertas distintas. La casa es la misma, pero las cerraduras que tenga cada puerta no tienen nada que ver, y las llaves y los cerrojos son totalmente distintos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 10-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Perdona neftali pero no estás en lo correcto.

Creo que estás mezclando la IP pública del router ADSL con la IP local de una RED con todas sus consecuencias.

En una red local obviamente no puedes acceder a un puerto de un ordenador si vienes desde Internet (bueno, si se puede si haces un enrutamiento).

Un móvil (u ordenador) se comporta exactamente igual respecto a puertos tanto si está conectado a una red local o directo a Internet (con módem usb por ejemplo). La configuración de estos no varía, y sólo te falla, como te digo anteriormente, si intentas acceder a ellos desde otra IP distinta como puede ser la pública de la ADSL, que podría llegar pero bajo NAT del router.

Un móvil con la IP 192.168.1.50 (local), y el mismo móvil con la IP 37.112.55.80 (pública) tiene exactamente el mismo comportamiento, es decir, si accedes a el a través de la IP local y el puerto te escucha, al desconectarlo y conectar con la pública debe hacer exactamente lo mismo. Si no lo hace es porque hay algo capado de por medio.

Para que lo entiendas de otra manera, tu ordenador con Windows y un cortafuegos bien puesto capará los puertos tanto si accedes a el en local como desde el exterior, ¿o te crees que porque accedas en local el ordenador tiene otro comportamiento?. Eso lo hace el ROUTER, no el ordenador ni el móvil.

Un saludote!!.
Responder Con Cita
  #7  
Antiguo 10-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Tal vez si me he hecho un lio o me he explicado mal...

Lo que quiero decir (y corrígeme si no es correcto) es que el camino para llegar al móvil es totalmente diferente si accedes a través de WIFI (en tu red local) que si accedes a través de IP pública.
En el primer caso pasas obligatoriamente por tu router, mientras que en el segundo caso no es así.

Ahora que leo el mensaje lo he escrito mal, veo que he puesto "Los puertos por un camino y por otro son (y deben serlo) diferentes", cuando quería decir "que la configuración de puertos que ves es diferente". En el caso de IP pública debes llegar directamente a los del dispositivo, en el caso de WIFI pasas por la configuración del router primero.

De todas formas es lo que me dicta la lógica, tal vez voy errado...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 11-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Efectivamente, ahora sí es correcto :-).

A ver, te explico exactamente que es lo que he hecho:

He creado una App servidor para el Android. La App escucha el puerto 8001 y lo que recibe lo pone directamente en un TMemo.

Luego he creado una aplicación cliente para el PC, que envía texto a la IP y Puerto de destino.


PRUEBA 1: Móvil y PC conectados a la red local (Wifi). Móvil con IP 192.168.1.45, PC con IP 192.168.1.10

Desde la aplicación cliente del PC, configuro la IP de envío 192.168.1.45, Puerto 8001.
Hago varios envíos de cadenas de texto y el Móvil lo recibe todo estupendamente.

PRUEBA 2: Móvil con su conexión a Internet con IP 37.87.10.99, PC obviamente con la IP local pero que sale a Internet con la IP pública de la ADSL (de todos modos no olvidemos que es el cliente, no tiene por qué tener enrutado ningún puerto ya que lo que hace es enviar, no recibir).

Desde la aplicación cliente del PC, configuro la IP de envío 37.87.10.99, Puerto 8001.
Cualquier intento de envío que hago, me da un Time Out. No puede conectar con dicha IP ni Puerto.

Otra prueba que hice es un simple PING a la IP pública del móvil, y tampoco me da ping.

Si la telefonía móvil funciona con IP's públicas compartidas o con un proxy severo, la única solución para comunicarse con un móvil va a tener que ser forzosamente a través de una nube o servicio propio donde el móvil se conecte cada X tiempo en busca de datos.

El caso es que he buscado información en Google y no encuentro nada!!.

Un saludote!!.
Responder Con Cita
  #9  
Antiguo 11-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Fossy Ver Mensaje
...la única solución para comunicarse con un móvil va a tener que ser forzosamente a través de una nube o servicio propio donde el móvil se conecte cada X tiempo en busca de datos.
Revisa los servicios Bass (Parse / Kinvey) y la interacción con Delphi.
A ver si las opciones que te ofrecen te pueden ayudar a lo que necesitas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 11-03-2015
chaosego chaosego is offline
Miembro
 
Registrado: ene 2007
Posts: 31
Poder: 0
chaosego Va por buen camino
Hola Fossy, perdona si lo has comentado antes y no lo he leído, pero ¿has abierto en el router el puerto 8001 y redirigido a tu servidor IP 192.168.1.10?

Desde 'dentro' de la misma red (en local) no hay problema con los puertos, pero accediendo desde internet debes de hacerlo si o si, si no, no podrás acceder a tu servidor ya que el router no sabría a que ordenador/IP de tu red local redirigir las peticiones que entren por ese puerto el 8001.

Hazte un portscan a tu IP pública desde alguna web y comprueba si da respuesta el puerto 8001.

Por otro lado, considera comprobar el tipo de acceso y las excepciones en el firewall que tengas instalado, ya que es posible que tengas permisos para la red local y denegación de accesos para las peticiones de internet.
Responder Con Cita
  #11  
Antiguo 11-03-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por chaosego Ver Mensaje
pero accediendo desde internet debes de hacerlo si o si, si no, no podrás acceder a tu servidor ya que el router no sabría a que ordenador/IP de tu red local redirigir las peticiones que entren por ese puerto el 8001.
Estamos hablando de acceder a un dispositivo móvil (teléfono), por lo tanto ese acceso NO PASA por el router.
Tal vez te has saltado algún mensaje de los de arriba...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 13-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Si Chaosego, hablamos de acceder directamente al móvil, bien sea por una IP local (pero directo desde la red local, sin pasar por Internet/Router), o bien con su IP pública. En ambos casos no es necesario tocar el router para nada.

De todos modos tampoco nos vamos a comer mucho el coco con esto. Son sencillamente pruebas que estoy haciendo, trasteando componentes y posibilidades, porque a la hora de la verdad cuando tengamos que hacer una App móvil ESTAMOS CONDENADOS a usar un servidor/nube de referencia, ya que aunque se pudiera acceder directamente a través de su IP pública, la cagamos cuando dicho usuario se conecte a una Wifi (ya no le entrará nada por haber un router de por medio), así que si queremos hacer una App que reciba cosas, tenemos que dotar el programa para conectar periódicamente a un servidor tipo Pasrse/Kinvey como bien dice el compañero Neftali, o bien realizar nuestro propio CGI como en mi caso, que lo he hecho en freepascal en mi servidor Linux y se comunica perfectamente vía web usando componentes HTTP de Indy. El problema se torna un poco a la hora de enviar/recibir ficheros, que se puede usando métodos GET/POST, pero es mas lio y además complica el CGI.

Os quería preguntar..., ¿sabéis si existe algún Backend/BAAS para Linux open source que podamos usar con nuestras Apps de Delphi?. Nos facilitaría enormemente la vida, ya que Parse y Kinvey son muy caros si se quiere hacer una App seria donde no puedes determinar el número de usuarios. Yo esos servidores no los veo como opción para "los pobres". Yo particularmente tengo un servidor dedicado al que le podría sacar muchísimo rendimiento si encontrase un Backend con el que las Apps pudieran comunicarse.

Un saludote!!.
Responder Con Cita
  #13  
Antiguo 14-03-2015
chaosego chaosego is offline
Miembro
 
Registrado: ene 2007
Posts: 31
Poder: 0
chaosego Va por buen camino
Teneis razón, se me pasó que era del pc al movil y no al revés.
Como frameworks opensource para BAAS hace tiempo, estuve viendo helios (http://helios.io/) y Deployd (http://deployd.com/), al final mire un poco mas por encima helios que es un backend mas simple, deployd, permite por lo que he oido, personalizarte mas el servicio.
No se si habrá cambiado la política de uso de estos dos fw, hace teimpo que no los he visto, y como pasa en la mayoría de los casos, salen opensource y al tiempo, cambian a servicios de pago.
Responder Con Cita
  #14  
Antiguo 14-03-2015
chaosego chaosego is offline
Miembro
 
Registrado: ene 2007
Posts: 31
Poder: 0
chaosego Va por buen camino
Acabo de pasar por la web de deployd y la verdad es que me ha sorprendido lo que ha evolucionado desde que lo visité por última vez, es bastante sencillo crear un backend al estilo de parse/kinvey, mas modesto eso si, pero bastante completo, y lo mejor es que es gratuito. Esta bien explicado el how to, y admite bastantes cosillas.

Fossy, esta disponible para linux y para windows también, por si alguno (como es mi caso) tenéis algún servidor bajo windows.

Ahora habrá que ver como responde desde Delphi. Supongo que desde XE7, con el componente de backend genérico que incorpora no debería de haber problemas.
Responder Con Cita
  #15  
Antiguo 16-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Gracias Chaosego, voy a verlo ahora mismo y te cuento...
Responder Con Cita
  #16  
Antiguo 16-03-2015
Fossy Fossy is offline
Miembro
 
Registrado: feb 2006
Posts: 65
Poder: 19
Fossy Va por buen camino
Chaosego, Helios es exclusivo para iOS, además el servidor sólo se puede ejecutar en un Mac. Y deployd no es exactamente un backend, a ver, se puede usar como tal porque es un Framework y su programación lo permitiría, pero no es lo que busco.

Sin embargo he dado con DreamFactory (https://www.dreamfactory.com), que sí es un Backend Restful. Esto si es lo que busco, sin embargo hay que usar un SDK que no sé implementar en Delphi, ni creo que se pueda de manera fácil.

A ver si tú eres capaz de echar un vistazo y ver si se puede.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Transferir archivos usando los componentes Indy cacu Varios 2 16-02-2015 10:35:24
Usando Content-Type con Indy MAXIUM Internet 2 14-09-2014 00:33:19
Varios puertos a la escucha Indy 10? Jhonjhon_123 Internet 2 09-08-2013 04:27:34
Conflicto de puertos con Indy davidrgh Internet 0 16-01-2012 15:06:47
Problema al enviar Email con adjuntos usando el componente Idsmtp de las indy Nbull Internet 2 22-11-2004 10:23:38


La franja horaria es GMT +2. Ahora son las 07:03:45.


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
Copyright 1996-2007 Club Delphi