Determina il tuo IP con Delphi

Internet questo e internet quello. Oggi tutti vogliono essere su Internet. Oggi tutti vogliono programmare Internet.

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

IP? TCP?

Semplicemente tecnico: Internet è basato su connessioni TCP / IP. La parte TCP descrive come due computer stabiliscono una connessione tra loro e trasferiscono i dati. La parte IP tratta principalmente di come instradare un messaggio su Internet. Ogni macchina connessa ha un indirizzo IP univoco che consente ad altri di individuare un percorso verso qualsiasi computer nel world wide web (o precisamente nel mondo).

Usa Winsock

Per ottenere l'indirizzo IP del computer in uso durante la connessione a Internet, è necessario chiamare alcune delle funzioni API * definite * nell'unità Winsock.

Creeremo un GetIPFromHost funzione che chiama diverse funzioni dell'API Winsock per ottenere l'IP. Prima che possiamo persino usare le funzioni di WinSock, dobbiamo avere una sessione valida. Questa sessione viene creata con la funzione WinSock WSAStartup. Al termine della nostra funzione, viene effettuata una chiamata al leanup SAC al fine di terminare l'utilizzo delle API di Windows Sockets. Per ottenere l'indirizzo IP del computer, dobbiamo usare GetHostByName insieme a GetHostName. Ogni computer è chiamato host e possiamo ottenere il nome host con una chiamata di funzione speciale: GetHostName. Quindi utilizziamo GetHostByName per ottenere l'indirizzo IP, correlato a questo nome host.

Ottieni IP Delphi.Project.Code

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

usi WINSOCK;
funzione GetIPFromHost
(var Nome host, IPaddr, WSAErr: corda): Booleano;
genere
Nome = array [0… 100] di char;
PName = ^ Nome;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: intero;
inizio
Risultato: = falso;
Se WSAStartup ($ 0101, WSAData) 0 quindi iniziare
WSAErr: = 'Winsock non risponde. "';
Uscita;
fine;
IPaddr: = ";
Nuovo (HName);
Se GetHostName (HName ^, SizeOf (Name)) = 0 thenbegin
Nomehost: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
per i: = 0 per HEnt ^ .h_length - 1 fare
IPaddr: =
Concat (indirizzo_IP,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Length (IPaddr) - 1);
Risultato: = True;
fine
altrimenti inizia il caso WSAGetLastError di
WSANOTINITIALISED: WSAErr: = 'WSANOTINITIALISED';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
fine;
fine;
Dispose (HName);
WSACleanup;
fine;
procedura TForm1.Button1Click (Mittente: TObject);
var
Host, IP, Err: corda;
inizio
Se GetIPFromHost (Host, IP, Err) quindi iniziare
Edit1.Text: = Host;
Edit2.Text: = IP;
fine
altro
MessageDlg (Err, mtError, [mbOk], 0);
fine;