Sunday, 14 December 2008

Obtener la dirección IP de una máquina con Delphi 2009

Para obtener la IP de un PC, así como su nombre de Host, hay un pequeño método muy útil que nos puede servir para esto:




type
Names = array[0..100] of AnsiChar;
PName = ^Names;


function GetIPFromHost(var HostName, IPaddr, WSAErr: string): Boolean;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: Integer;
begin
Result := False;
if WSAStartup($0101, WSAData) <> 0 then
begin
WSAErr := 'Winsock is not responding."';
Exit;
end;
IPaddr := '';
New(HName);
if GetHostName(HName^, SizeOf(Names)) = 0 then
begin
HostName := StrPas(HName^);
HEnt := GetHostByName(HName^);
for i := 0 to HEnt^.h_length - 1 do
IPaddr :=
Concat(IPaddr,
IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.');
SetLength(IPaddr, Length(IPaddr) - 1);
Result := True;
end
else
begin
case WSAGetLastError of
WSANOTINITIALISED: WSAErr := 'WSANotInitialised';
WSAENETDOWN: WSAErr := 'WSAENetDown';
WSAEINPROGRESS: WSAErr := 'WSAEInProgress';
end;
end;
Dispose(HName);
WSACleanup;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
HostName, IPAddr, Err: string;
begin
GetIPFromHost(HostName, IPAddr, Err);
end;




En la aplicación del post anterior : Creando una pequeña herramienta de xat, utilizo este método para obtener la IP de la máquina donde arranca el host.
El método da un pequeño warning por conversiones implícitas por todo el tema del unicode del delphi 2009. Tengo que arreglarlo, una vez lo tenga lo subo.

0 comments:

Post a Comment