Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

TIP [DELPHI] – Leggere l’indirizzo IP del computer su cui gira la vs applicazione

Digital Innovation Partner

TIP [DELPHI] – Leggere l’indirizzo IP del computer su cui gira la vs applicazione

E’ possibile ottenere l’ip (ip address) del proprio computer utilizzando la classe Indy “idIpWatch” , ad esempio per inserire l’ip nella caption del ns form è sufficiente:

implementation

uses IdIPWatch;

...

procedure TfrmMain.FormCreate(Sender: TObject);
var
  ids: TidIpWatch;

begin

 ids := TidIpWatch.Create;
 Caption := Caption + '(' + ids.LocalIP + ':8888)';
 ids.Free;


end;


Se invece ci si volesse complicare un pochino la vita si potrebbe interrogare direttamente il winSock in modo da non dover includere una classe indy nel progetto ma semplicemente il remap delle socket di windows. Di seguito una funzione che utilizzavo in Delphi 7 … che ovviamente da Delphi 2009 in poi andrebbe rivista dato che le stringhe sono diventate in formato Unicode.

di seguito la funzione che interroga Winsock:

uses winsock;

function GetIPFromHost(var HostName, IPaddr, WSAErr: string): Boolean;
type
Name = array[0..100] of Char;
PName = ^Name;
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(Name)) = 0 then
begin
HostName := StrPas(HName^);
HEnt := GetHostByName(HName^);
for i := 0 to HEnt^.h_length – 1 do
Begin
IPaddr := Concat(IPaddr,IntToStr(Ord(HEnt^.h_addr_list^[i])) + ‘.’);

End;
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;

Tags: , , , , , , ,

Lascia un commento