Ricerca nel blog

martedì 31 marzo 2009

Delphi - Funzione per ottenere un indirizzo IP

Di seguito è implementata e spiegata la funzione ( vedi funzioni ) che io utilizzo nei miei programmi per ottenere l'indirizzo IP e il Nome macchina dove essa viene eseguita.




Qualche piccola premessa:

Nella sezione delle USES va richiamata la libreria "Winsock".
Il tipo di dato restituito dalla funzione (denominato "indirizzo") è un record contenente 2 stringhe, così dichiarato:

indirizzo = Record
ipnumber: string;
hostname: string;
end;

Per quanto riguarda la funzione c'è da notare la chiamata WSAStartup che inizializza la DLL Winsock per dialogare col nostro programma. Il comando format viene utilizzato per genera una stringa in formato IPv4 (X.X.X.X)

Function GetIP:indirizzo;
var
WSAData: TWSAData;
HostName: string;
IP: indirizzo;
HostEnt: PHostEnt;
begin
try
WSAStartup(2,WSAData);
SetLength(HostName,255);
GetHostName(PChar(HostName),255);
SetLength(HostName,StrLen(PChar(HostName)));
HostEnt:=GetHostByName(PChar(HostName));
ip.hostname:=hostent^.h_name;
with HostEnt^ do
IP.ipnumber:=Format('%d.%d.%d.%d',
[Byte(h_addr^[0]),
Byte(h_addr^[1]),
Byte(h_addr^[2]),
Byte(h_addr^[3])]);
WSACleanup;
except
Ip.hostname:='Errore nella lettura dell'host name';
Ip.ipnumber:='Errore nella lettura dell'indirizzo IP';
end;
Result:=ip;
end;

La funzione restituisce il nome macchina (Hostname) e l'indirizzo IP (ipnumber). In caso di fallimento della funzione, nelle stringhe viene restituito un errore testuale.

Autore: Caino

Nessun commento:

Posta un commento

Post Correlati