Bepaal uw IP met Delphi

Internet dit en internet dat. Iedereen wil tegenwoordig op internet zijn. Iedereen wil tegenwoordig internet programmeren.

Een van de meest interessante taken bij het beginnen met coderen voor internet is het verkrijgen van het IP-adres van een computer die is verbonden met internet.

IK P? TCP?

Eenvoudig technisch: het internet is gebouwd op TCP / IP-verbindingen. Het TCP-gedeelte beschrijft hoe twee computers een verbinding met elkaar opzetten en gegevens overdragen. Het IP-gedeelte behandelt voornamelijk hoe een bericht via internet kan worden gerouteerd. Elke aangesloten machine heeft een uniek IP-adres waarmee anderen een pad kunnen vinden naar elke computer op het world wide web (of juist de wereld).

Gebruikt Winsock

Om het IP-adres te verkrijgen van de computer die u gebruikt wanneer u verbonden bent met internet, moeten we enkele van de API-functies * gedefinieerd * in de Winsock-eenheid aanroepen.

We maken een GetIPFromHost functie die verschillende Winsock API-functies aanroept om het IP te verkrijgen. Voordat we zelfs WinSock-functies kunnen gebruiken, moeten we een geldige sessie hebben. Deze sessie is gemaakt met de WinSock WSAStartup-functie. Aan het einde van onze functie wordt een beroep gedaan op SAC leanup om het gebruik van de Windows Sockets API's te beëindigen. Om het IP-adres van de computer te verkrijgen, moeten we GetHostByName gebruiken in combinatie met GetHostName. Elke computer wordt een host genoemd en we kunnen de hostnaam krijgen met een speciale functieaanroep: GetHostName. We gebruiken vervolgens GetHostByName om het IP-adres op te halen, gerelateerd aan deze hostnaam.

Download IP Delphi.Project.Code

Start Delphi en plaats er een Knop en twee Bewerk vakken op een nieuw gemaakt formulier. Voeg de GetIPFromHost functie aan het implementatiegedeelte van uw eenheid en wijs de volgende code toe aan de OnClick-gebeurtenishandler van een knop (hieronder):

toepassingen winsock;
functie GetIPFromHost
(var HostName, IPaddr, WSAErr: draad): Boolean;
type
Name = array [0… 100] van char;
PName = ^ Naam;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: geheel getal;
beginnen
Resultaat: = niet waar;
als WSAStartup ($ 0101, WSAData) 0 begin dan
WSAErr: = 'Winsock reageert niet. "';
Uitgang;
einde;
IPaddr: = ";
Nieuw (HName);
als GetHostName (HName ^, SizeOf (Name)) = 0 thenbegin
HostName: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
voor i: = 0 naar HEnt ^ .h_length - 1 Doen
IPaddr: =
Concat (IPaddr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Length (IPaddr) - 1);
Resultaat: = Waar;
einde
anders begin geval WSAGetLastError van
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
einde;
einde;
Dispose (HName);
WSACleanup;
einde;
procedure TForm1.Button1Click (Sender: TObject);
var
Host, IP, Err: draad;
beginnen
als GetIPFromHost (Host, IP, Err) begin dan
Edit1.Text: = Host;
Edit2.Text: = IP;
einde
anders
MessageDlg (Err, mtError, [mbOk], 0);
einde;