Determinați IP-ul dvs. cu Delphi

Internet asta și internet că. Toată lumea vrea să fie pe internet în zilele noastre. Toată lumea vrea să programeze internet în zilele noastre.

Una dintre cele mai interesante sarcini atunci când începeți să codați internetul este cum să obțineți adresa IP a unui computer conectat la internet.

IP? TCP?

Simplu tehnic: internetul este construit pe conexiuni TCP / IP. Partea TCP descrie modul în care două computere își stabilesc o conexiune între ele și își transferă date. Partea IP se ocupă în primul rând despre modul de a primi un mesaj dirijat pe internet. Fiecare mașină conectată are o adresă IP unică care le permite altora să-și dea seama de o cale către orice computer de pe întregul web (sau mai precis din lume).

Utilizează Winsock

Pentru a obține adresa IP a computerului pe care îl utilizați când sunteți conectat la internet, trebuie să apelăm la unele dintre funcțiile API * definite * din unitatea Winsock.

Vom crea un GetIPFromHost funcție care apelează mai multe funcții API Winsock pentru a obține IP. Înainte de a putea folosi chiar funcțiile WinSock, trebuie să avem o sesiune validă. Această sesiune este creată cu funcția WinSock WSAStartup. La sfârșitul funcției noastre, se apelează la apăsarea SAC pentru a înceta utilizarea API-ului Windows Sockets. Pentru a obține adresa IP a computerului, trebuie să folosim GetHostByName împreună cu GetHostName. Fiecare computer se numește gazdă și putem obține numele de gazdă cu un apel funcțional special: GetHostName. Apoi folosim GetHostByName pentru a obține adresa IP, legată de acest nume de gazdă.

Obțineți IP Delphi.Project.Code

Începeți Delphi și puneți unul Buton si doi Editați | × căsuțe pe un formular nou creat. Adaugă GetIPFromHost funcționează la partea de implementare a unității tale și alocă codul următor gestionarului de eveniment OnClick al unui buton (mai jos):

utilizări WinSock;
funcţie GetIPFromHost
(var Nume gazdă, IPaddr, WSAErr: şir): Boolean;
tip
Nume = tablou [0 ... 100] de Carboniza;
PName = ^ Nume;
var
HEnt: pHostEnt;
Nume: PName;
WSAData: TWSAData;
i: Integer;
începe
Rezultat: = Fals;
dacă WSAStartup (0101 $, WSAData) 0 apoi începe
WSAErr: = 'Winsock nu răspunde.' ';
Ieșire;
Sfârșit;
IPaddr: = ";
Noi (HName);
dacă GetHostName (HName ^, SizeOf (Name)) = 0 thenbegin
HostName: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
pentru i: = 0 la HEnt ^ .h_length - 1 do
IPaddr: =
Concat (IPaddr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Length (IPaddr) - 1);
Rezultat: = True;
Sfârșit
altfel începe cazul WSAGetLastError de
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
Sfârșit;
Sfârșit;
Evacuarea (HName);
WSACleanup;
Sfârșit;
procedură TForm1.Button1Click (Expeditor: TObject);
var
Host, IP, Err: şir;
începe
dacă GetIPFromHost (gazdă, IP, eroare) apoi începe
Edit1.Text: = Gazdă;
Edit2.Text: = IP;
Sfârșit
altfel
MessageDlg (Err, mtError, [mbOk], 0);
Sfârșit;