Internet dies und das Internet. Jeder möchte heutzutage im Internet sein. Jeder möchte heutzutage das Internet programmieren.
Eine der interessantesten Aufgaben beim Codieren für das Internet besteht darin, die IP-Adresse eines mit dem Internet verbundenen Computers zu ermitteln.
Einfach technisch: Das Internet baut auf TCP / IP-Verbindungen auf. Der TCP-Teil beschreibt, wie zwei Computer eine Verbindung herstellen und Daten übertragen. Der IP-Teil befasst sich hauptsächlich damit, wie eine Nachricht über das Internet weitergeleitet wird. Jeder verbundene Computer verfügt über eine eindeutige IP-Adresse, mit der andere einen Pfad zu einem beliebigen Computer im World Wide Web (oder weltweit genau) ermitteln können..
Um die IP-Adresse des Computers zu ermitteln, den Sie verwenden, wenn Sie mit dem Internet verbunden sind, müssen Sie einige der in der Winsock-Einheit * definierten * API-Funktionen aufrufen.
Wir werden eine erstellen GetIPFromHost Funktion, die mehrere Winsock-API-Funktionen aufruft, um die IP abzurufen. Bevor wir überhaupt WinSock-Funktionen verwenden können, müssen wir eine gültige Sitzung haben. Diese Sitzung wird mit der WinSock WSAStartup-Funktion erstellt. Am Ende unserer Funktion wird SAC Leanup aufgerufen, um die Verwendung der Windows Sockets-APIs zu beenden. Um die IP-Adresse des Computers zu erhalten, müssen wir GetHostByName in Verbindung mit GetHostName verwenden. Jeder Computer wird als Host bezeichnet, und wir können den Hostnamen mit einem speziellen Funktionsaufruf abrufen: GetHostName. Wir verwenden dann GetHostByName, um die IP-Adresse zu ermitteln, die zu diesem Hostnamen gehört.
Starten Sie Delphi und platzieren Sie eine Taste und zwei Bearbeiten Felder auf einem neu erstellten Formular. Ergänzen Sie die GetIPFromHost Funktionieren Sie mit dem Implementierungsteil Ihrer Einheit und weisen Sie dem OnClick-Ereignishandler einer Schaltfläche (unten) den folgenden Code zu:
Verwendet Winsock;
Funktion GetIPFromHost
(var Hostname, IPaddr, WSAErr: Zeichenfolge): Boolean;
Art
Name = Array [0… 100] von Verkohlen;
PName = ^ Name;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: ganze Zahl;
Start
Ergebnis: = Falsch;
wenn WSAStartup ($ 0101, WSAData) 0 dann fang an
WSAErr: = 'Winsock antwortet nicht. "';
Ausgang;
Ende;
IPaddr: = ";
Neu (HName);
wenn GetHostName (HName ^, SizeOf (Name)) = 0 dann fange an
Hostname: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
zum i: = 0 zu HEnt ^ .h_length - 1 tun
IPaddr: =
Concat (IPaddr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Length (IPaddr) - 1);
Ergebnis: = True;
Ende
Andernfalls beginnt der Fall WSAGetLastError von
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
Ende;
Ende;
Entsorgen (HName);
WSACleanup;
Ende;
Verfahren TForm1.Button1Click (Absender: TObject);
var
Host, IP, Err: Zeichenfolge;
Start
wenn GetIPFromHost (Host, IP, Err) dann fang an
Edit1.Text: = Host;
Edit2.Text: = IP;
Ende
sonst
MessageDlg (Err, mtError, [mbOk], 0);
Ende;