Determina il tuo IP con Delphi

Internet questo e Internet quello. Tutti vogliono essere su Internet al giorno d’oggi. Tutti vogliono programmare Internet al giorno d’oggi.

Uno dei compiti più interessanti quando si inizia a programmare per Internet è come ottenere l’indirizzo IP di un computer connesso a Internet.

IP? TCP?

Semplicemente tecnico: Internet si basa su connessioni TCP / IP. La parte TCP descrive come due computer stabiliscono una connessione tra loro e trasferiscono i dati. La parte IP si occupa principalmente di come ottenere un messaggio instradato su Internet. Ogni macchina connessa ha un indirizzo IP univoco che consente ad altri di individuare un percorso per qualsiasi computer nel World Wide Web (o il mondo precisamente).

Utilizza Winsock

Per ottenere l’indirizzo IP del computer che stai utilizzando quando sei connesso a Internet, dobbiamo chiamare alcune delle funzioni API * definite * nell’unità Winsock.

Creeremo una funzione GetIPFromHost che chiama diverse funzioni API Winsock per ottenere l’IP. Prima di poter anche utilizzare le funzioni di WinSock, dobbiamo disporre di una sessione valida. Questa sessione viene creata con la funzione WSAStartup di WinSock. Alla fine della nostra funzione, viene effettuata una chiamata a SAC leanup per terminare l’utilizzo delle API di Windows Sockets. Per ottenere l’indirizzo IP del computer, dobbiamo utilizzare GetHostByName insieme a GetHostName. Ogni computer è chiamato host e possiamo ottenere il nome host con una chiamata di funzione speciale: GetHostName. Quindi usiamo GetHostByName per ottenere l’indirizzo IP, relativo a questo nome host.

Ottieni IP Delphi.Project.Code

Avvia Delphi e posizionane uno Pulsante e due Modifica caselle su un modulo appena creato. Aggiungi il GetIPFromHost funzione alla parte di implementazione della tua unità e assegna il seguente codice al gestore di eventi OnClick di un pulsante (sotto):

usa Winsock; 
function GetIPFromHost
(var Nome host, IPaddr, WSAErr: stringa): Booleano;
Digitare
Nome = matrice [0..100] of char;
PName = ^ Name;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: intero;
iniziare
Risultato: = Falso;
if WSAStartup ($ 0101, WSAData) 0 allora inizia
WSAErr: = 'Winsock non risponde. "';
Exit;
fine;
IPaddr: = '';
Nuovo (HName);
if GetHostName (HName ^, SizeOf (Name)) = 0 quindi iniziare
HostName: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
per i: = 0 a HEnt ^ .h_length - 1 do
IPaddr: =
Concat (IPaddr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Length (IPaddr) - 1);
Risultato: = Vero;
fine
altrimenti inizia il caso WSAGetLastError of
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
fine;
fine;
Dispose (HName);
WSACleanup;
fine;
procedura TForm1.Button1Click (Sender: TObject);
var
Host, IP, Err: stringa;
iniziare
if GetIPFromHost (Host, IP, Err) allora inizia
Edit1.Text: = Host;
Edit2.Text: = IP;
fine
altro
MessageDlg (Err, mtError, [mbOk], 0);
fine;