Bestäm din IP med Delphi

Internet detta och internet det. Alla vill vara på internet nuförtiden. Alla vill programmera internet nuförtiden.

En av de mest intressanta uppgifterna när man börjar koda för internet är hur man får IP-adressen till en dator ansluten till internet.

IP? TCP?

Enkelt tekniskt: internet är byggt på TCP / IP-anslutningar. TCP-delen beskriver hur två datorer skapar en anslutning till varandra och överför data. IP-delen behandlar främst hur man får ett meddelande dirigerat över internet. Varje ansluten maskin har en unik IP-adress som gör det möjligt för andra att räkna ut en väg till vilken dator som helst på hela webben (eller exakt världen).

Använder Winsock

För att få IP-adressen till den dator du använder när du är ansluten till internet måste vi ringa några av API-funktionerna * definierade * i Winsock-enheten.

Vi skapar en GetIPFromHost -funktion som anropar flera Winsock API-funktioner för att få IP. Innan vi ens kan använda WinSock-funktioner måste vi ha en giltig session. Den här sessionen skapas med WinSock WSAStartup-funktionen. I slutet av vår funktion görs ett samtal till SAC leanup för att avsluta användningen av Windows Sockets API: er. För att få datorns IP-adress måste vi använda GetHostByName tillsammans med GetHostName. Varje dator kallas en värd och vi kan få värdnamnet med ett specialfunktionssamtal: GetHostName. Vi använder sedan GetHostByName för att få IP-adressen, relaterad till detta värdnamn.

Skaffa IP Delphi.Project.Code

Starta Delphi och placera en Knapp och två Redigera rutor på ett nyskapat formulär. Lägg till GetIPFromHost funktion till implementeringsdelen av din enhet och tilldela följande kod till händelseshanteraren OnClick med en knapp (nedan):

användningar WinSock;
fungera GetIPFromHost
(var Värdnamn, IPaddr, WSAErr: sträng): Boolean;
typ
Namn = matris [0… 100] av Röding;
PName = ^ Namn;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: heltal;
Börja
Resultat: = Falsk;
om WSAStartup ($ 0101, WSAData) 0 börja sedan
WSAErr: = 'Winsock svarar inte. "';
Utgång;
slutet;
IPaddr: = ";
Ny (HName);
om GetHostName (HName ^, SizeOf (Name)) = 0 thenbegin
Värdnamn: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
för i: = 0 till HEnt ^ .h_length - 1 do
IPaddr: =
Concat (IpAdr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Length (IPaddr) - 1);
Resultat: = Sann;
slutet
annars börjar fallet WSAGetLastError av
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
slutet;
slutet;
Dispose (HName);
WSACleanup;
slutet;
procedur TForm1.Button1Click (avsändare: TObject);
var
Host, IP, Err: sträng;
Börja
om GetIPFromHost (Host, IP, Err) börja sedan
Edit1.Text: = Host;
Edit2.Text: = IP;
slutet
annan
MeddelandeDlg (Err, mtError, [mbOk], 0);
slutet;