Ver Mensaje Individual
  #1  
Antiguo 17-11-2009
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Reputación: 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