Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2009
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
¿Cómo detectar si la conexión es LAN o WAN?

Hola:

he desarrollado un programa usando el Delphi 2009, consta de un módulo servidor y otro cliente, usando tecnología DataSnap, muy buena por cierto.
El módulo cliente tiene la habilidad de detectar si el usuario está en la conexión LAN de su trabajo o WAN si está fuera de la oficina para poder conectar a la Base de Datos.
Existe una IP Privada para la LAN y otra IP pública para la WAN y la forma que se me ha ocurrido para detectar el tipo de red a la que debe conectarse no es otra que usando lo siguiente:
[delphi]
procedure TDM.DataModuleCreate(Sender: TObject);
var
PathLocal, PathServidor: string;
NombreExe: PChar;
begin
NombreExe := 'NombrePrograma';
PathLocal := 'C:\Aplicaciones\'+NombreExe+'.exe';
SQLConnection.Close;
SQLConnection.Params.Clear;
SQLConnection.Params.Add('Port=nnnn');
SQLConnection.Params.Add('User_Name=sa');
SQLConnection.Params.Add('Password=********');
// Prueba Conexión LAN
IpFtp := 'IP.PRIVADA';
SQLConnection.Params.Add('HostName='+IpFtp);
PathServidor := '\\'+IpFtp+'\wwwroot\Aplicaciones\'+NombreExe+'.exe';
if FileExists(PathServidor) then begin
Conexion := 'Conexión vía LAN';
end
else begin
// Prueba Conexión WAN
IpFtp := 'IP.PUBLICA';
SQLConnection.Params.Delete(SQLConnection.Params.Count-1);
SQLConnection.Params.Add('HostName='+IpFtp);
PathServidor := '\\'+IpFtp+'\wwwroot\Aplicaciones\'+NombreExe+'.exe';
if FileExists(PathServidor) then begin
Conexion := 'Conexión vía WAN';
end
else begin
ShowMessage('No se ha podido conectar vía LAN ni WAN');
EXIT;
end;
end;
end;
[\Delphi]

El código anterior, que solo muestra lo principal, funciona. Lo malo que tiene que la instrucción 'FileExists' es muy lenta y en ocaciones cuando se está fuera de la oficina demora cerca de 2 minutos en dar respuesta.

Mi pregunta es: ¿Conocen otra técnica, que responda mas rápidamente en reemplazo alo que utilizo actualmente?

Mucha gracias
Responder Con Cita
  #2  
Antiguo 17-11-2009
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Post

(Este mensaje es igual al anterior, con la corrección del código)
Hola:

he desarrollado un programa usando el Delphi 2009, consta de un módulo servidor y otro cliente, usando tecnología DataSnap, muy buena por cierto.
El módulo cliente tiene la habilidad de detectar si el usuario está en la conexión LAN de su trabajo o WAN si está fuera de la oficina para poder conectar a la Base de Datos.
Existe una IP Privada para la LAN y otra IP pública para la WAN y la forma que se me ha ocurrido para detectar el tipo de red a la que debe conectarse no es otra que usando lo siguiente:

Código Delphi [-]
procedure TDM.DataModuleCreate(Sender: TObject);
var
 PathLocal, PathServidor: string;
 NombreExe: PChar;
begin
 NombreExe := 'NombrePrograma';
 PathLocal := 'C:\Aplicaciones\'+NombreExe+'.exe';
 SQLConnection.Close;
 SQLConnection.Params.Clear;
 SQLConnection.Params.Add('Port=nnnn');
 SQLConnection.Params.Add('User_Name=sa');
 SQLConnection.Params.Add('Password=********');
// Prueba Conexión LAN
 IpFtp := 'IP.PRIVADA';
 SQLConnection.Params.Add('HostName='+IpFtp);
 PathServidor := '\\'+IpFtp+'\wwwroot\Aplicaciones\'+NombreExe+'.exe';
 if FileExists(PathServidor) then begin
  Conexion := 'Conexión vía LAN';
 end
 else begin
  // Prueba Conexión WAN
  IpFtp := 'IP.PUBLICA';
  SQLConnection.Params.Delete(SQLConnection.Params.Count-1);
  SQLConnection.Params.Add('HostName='+IpFtp);
  PathServidor := '\\'+IpFtp+'\wwwroot\Aplicaciones\'+NombreExe+'.exe';
  if FileExists(PathServidor) then begin
  Conexion := 'Conexión vía WAN';
 end
 else begin
  ShowMessage('No se ha podido conectar vía LAN ni WAN');
  EXIT;
 end;
 end;
end;




El código anterior, que solo muestra lo principal, funciona. Lo malo que tiene que la instrucción 'FileExists' es muy lenta y en ocaciones cuando se está fuera de la oficina demora cerca de 2 minutos en dar respuesta.

Mi pregunta es: ¿Conocen otra técnica, que responda mas rápidamente en reemplazo alo que utilizo actualmente?

Mucha gracias
Responder Con Cita
  #3  
Antiguo 17-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Y nos podrias explicar para que quieres saber si la conexion es LAN o WAN o con que proposito?...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
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
Detectar conexión tipo/activa taita Internet 3 13-05-2015 21:43:46
Detectar problemas de conexion.... Jose Roman Conexión con bases de datos 1 04-02-2009 16:44:09
Detectar conexion Firebird brandolin Conexión con bases de datos 1 19-12-2005 18:12:07
Lanzar aplicacion al detectar conexion a internet Delphius API de Windows 16 30-03-2005 15:43:59
Detectar una conexion a internet JCR Internet 1 02-06-2004 22:12:04


La franja horaria es GMT +2. Ahora son las 00:39:54.


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