Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo detectar si la conexión es LAN o WAN? (https://www.clubdelphi.com/foros/showthread.php?t=65046)

gcaffe 17-11-2009 17:56:09

¿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

gcaffe 17-11-2009 18:00:48

(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

rgstuamigo 17-11-2009 19:20:05

Y nos podrias explicar para que quieres saber si la conexion es LAN o WAN o con que proposito?:confused::confused:...
Saludos...:)


La franja horaria es GMT +2. Ahora son las 11:00:12.

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