Ver Mensaje Individual
  #2  
Antiguo 18-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Vamos con un poco de código:
Código Delphi [-]
uses Winsock;

function Validar(Str: string): Boolean;
var
  i: integer;
  ip: string;
begin
  Result:= FALSE;
  if Pos(':',Str) > 0 then
  begin
    ip:= Copy(Str,1,Pos(':',Str)-1);
    Delete(Str,1,Pos(':',Str));
    Result:= (inet_addr(PChar(ip)) <> INADDR_NONE) and
      TryStrToInt(Str,i) and (i<65535) and (i>0);
  end;
end;

La función anterior separa en dos partes la cadena, la ip por un lado y el puerto por el otro. Luego intenta convertir la ip y el puerto a sus correspondientes valores binarios, si no puede quiere decir que no son validos.

Un ejemplo de como funciona:
Código Delphi [-]
// Estas espresiones devuelven TRUE
Validar('210.114.174.96:4480');  // La ip en formato decimal
Validar('0xd2.0x72.0xae.0x60:4480'); // La ip en formato hexadecimal
Validar('210.0x72.174.96:4480'); // La ip en formato mixto

// Estas devuelven FALSE
Validar('210.300.174.96:4480'); // Uno de los valores esta fuera del rango
Validar('210.hola.174.96:4480');  // Esto no es una ip
Validar('210.114.174.96:1000000'); // El puerto esta fuera del rango

Última edición por seoane fecha: 18-11-2006 a las 00:37:59.
Responder Con Cita