Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2008
maro maro is offline
Miembro
 
Registrado: sep 2003
Ubicación: Sevilla
Posts: 104
Poder: 21
maro Va por buen camino
usar upnp con Delphi para configurar nat en un router?

Hola,

He leído en algunas páginas, por Internet, que utilizando upnp es posible añadir un registro a la tabla de nat del router, de tal forma que un programa que contenga un servidor tcp pueda "escuchar" de forma transparente, sin que el usuario tenga que configurar el router o firewall.

Incluso he encontrado este código:
Código Delphi [-]
Procedure AddUPnPEntry( Port : Integer;  const Name : ShortString);
Var
  Nat   : Variant;
  Ports : Variant;
Begin
  if NOT (LAN_IP = '127.0.0.1') then
  begin
    try
      Nat := CreateOleObject('HNetCfg.NATUPnP');
      Ports := Nat.StaticPortMappingCollection;
                        showMessage(inttostr(Ports.count));
      Ports.Add(port, 'TCP', port, LAN_IP, True, name);
    except
      ShowMessage(
        'An Error occured with adding UPnP Ports. The ' + name +
        ' port was not added to the router.  Please check to see if your ' +
        'router supports UPnP and has it enabled or disable UPnP.'
      );
    end;
    {[2006/03/04] CR - I'd looked into other ways to handle errors, but,
     unfortunately the try-except Alex used here originally is the ONLY way
     to trap errors.  OLE/.COM bites, if you have to rely on exceptions all the
     time! :P~~ }
  end;
End; { Proc AddUPnPEntry}

pero no consigo que funcione.

¿Alguén sabe algo sobre este tema?

Muchas gracias.
Un Saludo.
__________________
Maro. OutSourcing de programación con Delphi.
Responder Con Cita
  #2  
Antiguo 21-03-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Antes de nada ¿te aseguraste de que tu router soporta UPnP y que esta habilitado?
Responder Con Cita
  #3  
Antiguo 21-03-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Y se me olvidaba para que funcione tienes que tener instalado "Interfaz de usuario UPnP". Lo puedes instalar des "Agregar y quitar progrmas" -> "Agregar o quitar componentes de windows" -> "Servicios de red" -> "Interfaz de usuario UPnP
Responder Con Cita
  #4  
Antiguo 24-03-2008
maro maro is offline
Miembro
 
Registrado: sep 2003
Ubicación: Sevilla
Posts: 104
Poder: 21
maro Va por buen camino
Gracias Seoane,

El router si soporta UPnP y está habilitado. Igualmente, tengo instalado Windows XP y también tengo instalado el servicio (tal como comentas) de uPnP.

Pero... al ejecutar el código que indiqué, delphi me da un access violation.

Alguna sugenrecia?

gracias nuevamente.
Un Saludo.
__________________
Maro. OutSourcing de programación con Delphi.
Responder Con Cita
  #5  
Antiguo 24-03-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Me pregunto en que tipo de aplicación estas usando esa función ¿con formularios? ¿de consola?. De todas formas prueba utilizando la función CoInitialize antes de llamar a la función.

Por lo demás a mi me funciona perfectamente
Responder Con Cita
  #6  
Antiguo 25-03-2008
maro maro is offline
Miembro
 
Registrado: sep 2003
Ubicación: Sevilla
Posts: 104
Poder: 21
maro Va por buen camino
Hola de nuevo.

Pues la verdad es que no ando muy espavilao con este código, es decir, que es la primera vez que utilizo upnp y logicamente ando un poco perdido.

Para probarlo, lo estoy ejecutando desde un formulario normal y corriente.
¿debería funcionar en un formulario?

Depurando el código veo que en esta línea:
Código Delphi [-]
Ports := Nat.StaticPortMappingCollection;
La variable "Ports" tiene asignada la dirección $00000000 y al ejecutar la siguiente línea:
Código Delphi [-]
Ports.Add(port, 'TCP', port, LAN_IP, True, name);
da el access violation.

He introducido la línea CoInitialize(nil); al principio de la función y obtengo el mismo resultado.

Gracias por contestar seoane.
Un Saludo.
__________________
Maro. OutSourcing de programación con Delphi.
Responder Con Cita
  #7  
Antiguo 25-03-2008
maro maro is offline
Miembro
 
Registrado: sep 2003
Ubicación: Sevilla
Posts: 104
Poder: 21
maro Va por buen camino
Perdona de nuevo Seasone,

¿Sabes algo sobre esto (me tiene intrigado)?:

Si tengo dos redes y en ambas desactivo la opción de upnp de los routers: ¿Como puede ms Messenger conectar directamente a mi ip pública para mantener una conversación entre dos usuarios? (un usuario de cada red, claro)

Gracias.
Un Saludo.
__________________
Maro. OutSourcing de programación con Delphi.
Responder Con Cita
  #8  
Antiguo 25-03-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por maro Ver Mensaje
Si tengo dos redes y en ambas desactivo la opción de upnp de los routers: ¿Como puede ms Messenger conectar directamente a mi ip pública para mantener una conversación entre dos usuarios? (un usuario de cada red, claro)
El msn no necesita tener los puertos abiertos del router para mantener una conversación, ni siquiera necesita estar directamente conectado a internet ya que es capaz de salir a través de un proxy http. Es el rey saltándose limitaciones

Piensa que durante una conversación de messenger ambos clientes están conectados al servidor de msn y no conectados entre si. Solo se conectan directamente entre ellos cuando se envían un fichero, o se utiliza la cámara web o el micrófono. En esos casos, solo hace falta que uno de los dos tenga un puerto abierto.
Responder Con Cita
  #9  
Antiguo 25-03-2008
maro maro is offline
Miembro
 
Registrado: sep 2003
Ubicación: Sevilla
Posts: 104
Poder: 21
maro Va por buen camino
Cita:
Empezado por seoane Ver Mensaje
Piensa que durante una conversación de messenger ambos clientes están conectados al servidor de msn y no conectados entre si. Solo se conectan directamente entre ellos cuando se envían un fichero, o se utiliza la cámara web o el micrófono. En esos casos, solo hace falta que uno de los dos tenga un puerto abierto.
Cierto, totalmente de acuerdo. Me confundí entre mantener conversaciones y enviar ficheros.
No obstante, lo que me intriga es que en mi caso, con upnp descativado en los dos router al enviar un fichero por ms messenger (de un usuario de una red a otro de otra red) crea una conexión directa entre las ip's publicas de ambos routers

Creo que ... ¿es imposible realizar conexiones directas por socket's sin redireccionar puertos (cuando hay routers por medio, claro)? ¿no?

Gracias seoane y perdona la guerra que te estoy dando con este tema.
__________________
Maro. OutSourcing de programación con Delphi.
Responder Con Cita
Respuesta



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
exportar .h para usar en Delphi ? Guillermo80 C++ Builder 0 19-01-2008 20:28:57
Programa para medir cantidad de saltos por router en web.. JuanErasmo Internet 9 30-11-2006 00:21:45
Como puedo configurar un host y un Router? danytorres Redes 0 19-01-2006 15:13:17
10 razones para dejar de usar Delphi.. Delfino Humor 5 18-10-2005 01:41:58
Configurar Router ADSL Telefónica DarkByte Linux 13 22-02-2004 09:42:44


La franja horaria es GMT +2. Ahora son las 00:47:27.


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