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