Internet ceci et Internet cela. Tout le monde veut être sur Internet de nos jours. Tout le monde veut programmer Internet de nos jours.
L'une des tâches les plus intéressantes lorsque vous commencez à coder pour Internet est de savoir comment obtenir l'adresse IP d'un ordinateur connecté à Internet.
Simplement technique: Internet est construit sur des connexions TCP / IP. La partie TCP décrit comment deux ordinateurs établissent une connexion entre eux et transfèrent des données. La partie IP traite principalement de la façon de faire acheminer un message sur Internet. Chaque machine connectée a une adresse IP unique qui permet aux autres de trouver un chemin vers n'importe quel ordinateur sur le World Wide Web (ou le monde précisément).
Pour obtenir l'adresse IP de l'ordinateur que vous utilisez lorsque vous êtes connecté à Internet, nous devons appeler certaines des fonctions API * définies * dans l'unité Winsock.
Nous allons créer un GetIPFromHost fonction qui appelle plusieurs fonctions de l'API Winsock afin d'obtenir l'IP. Avant même de pouvoir utiliser les fonctions WinSock, nous devons avoir une session valide. Cette session est créée avec la fonction WinSock WSAStartup. À la fin de notre fonction, un appel au leanup SAC est effectué afin de mettre fin à l'utilisation des API Windows Sockets. Pour obtenir l'adresse IP de l'ordinateur, nous devons utiliser GetHostByName conjointement avec GetHostName. Chaque ordinateur est appelé hôte et nous pouvons obtenir le nom d'hôte avec un appel de fonction spéciale: GetHostName. Nous utilisons ensuite GetHostByName pour obtenir l'adresse IP, liée à ce nom d'hôte.
Démarrez Delphi et placez-en un Bouton et deux Éditer boîtes sur un formulaire nouvellement créé. Ajouter le GetIPFromHost fonction à la partie implémentation de votre unité et attribuez le code suivant au gestionnaire d'événement OnClick d'un bouton (ci-dessous):
les usages Winsock;
une fonction GetIPFromHost
(var HostName, IPaddr, WSAErr: chaîne): Booléen;
type
Nom = tableau [0… 100] de Carboniser;
PName = ^ Nom;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: Entier;
commencer
Résultat: = False;
si WSAStartup (0101 $, WSAData) 0 alors commence
WSAErr: = 'Winsock ne répond pas. "';
Sortie;
fin;
IPaddr: = ";
Nouveau (HName);
si GetHostName (HName ^, SizeOf (Name)) = 0 puis commencer
HostName: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
pour i: = 0 à HEnt ^ .h_length - 1 faire
IPaddr: =
Concat (IPaddr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Longueur (IPaddr) - 1);
Résultat: = True;
fin
sinon commencer le cas WSAGetLastError de
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
fin;
fin;
Éliminer (HName);
WSACleanup;
fin;
procédure TForm1.Button1Click (expéditeur: TObject);
var
Hôte, IP, Err: chaîne;
commencer
si GetIPFromHost (hôte, IP, Err) alors commence
Edit1.Text: = Host;
Edit2.Text: = IP;
fin
autre
MessageDlg (Err, mtError, [mbOk], 0);
fin;