Determine su IP con Delphi

Internet esto e internet eso. Todos quieren estar en internet hoy en día. Todos quieren programar internet hoy en día.

Una de las tareas más interesantes al comenzar a codificar para Internet es cómo obtener la dirección IP de una computadora conectada a Internet..

IP? TCP?

Simplemente técnico: Internet se basa en conexiones TCP / IP. La parte TCP describe cómo dos computadoras configuran una conexión entre sí y transfieren datos. La parte de IP trata principalmente sobre cómo enviar un mensaje a través de Internet. Cada máquina conectada tiene una dirección IP única que permite que otros descubran una ruta a cualquier computadora en todo el mundo (o el mundo con precisión).

Utiliza Winsock

Para obtener la dirección IP de la computadora que está utilizando cuando está conectado a Internet, necesitamos llamar a algunas de las funciones API * definidas * en la unidad Winsock.

Crearemos un GetIPFromHost función que llama a varias funciones de la API Winsock para obtener la IP. Antes de que podamos usar las funciones de WinSock, debemos tener una sesión válida. Esta sesión se crea con la función WinSock WSAStartup. Al final de nuestra función, se realiza una llamada a la adaptación de SAC para finalizar el uso de las API de Windows Sockets. Para obtener la dirección IP de la computadora, debemos usar GetHostByName junto con GetHostName. Cada computadora se llama host y podemos obtener el nombre de host con una llamada de función especial: GetHostName. Luego usamos GetHostByName para obtener la dirección IP, relacionada con este nombre de host.

Obtener IP Delphi.Project.Code

Inicie Delphi y coloque uno Botón y dos Editar cuadros en un formulario recién creado. Añade el GetIPFromHost funcionar a la parte de implementación de su unidad y asignar el siguiente código al controlador de eventos OnClick de un botón (a continuación):

usos Winsock
función GetIPFromHost
(var HostName, IPaddr, WSAErr: cuerda): Booleano;
tipo
Nombre = matriz [0 ... 100] de Carbonizarse;
PName = ^ Nombre;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: entero;
empezar
Resultado: = falso;
Si WSAStartup ($ 0101, WSAData) 0 entonces comienza
WSAErr: = 'Winsock no responde. "';
Salida;
final;
IPaddr: = ";
Nuevo (HName);
Si GetHostName (HName ^, SizeOf (Name)) = 0 entonces comenzar
HostName: = StrPas (HName ^);
HEnt: = GetHostByName (HName ^);
para i: = 0 a HEnt ^ .h_length - 1 hacer
IPaddr: =
Concat (IPaddr,
IntToStr (Ord (HEnt ^ .h_addr_list ^ [i])) + '.');
SetLength (IPaddr, Longitud (IPaddr) - 1);
Resultado: = Verdadero;
final
de lo contrario comenzará el caso WSAGetLastError de
WSANOTINITIALISED: WSAErr: = 'WSANotInitialised';
WSAENETDOWN: WSAErr: = 'WSAENetDown';
WSAEINPROGRESS: WSAErr: = 'WSAEInProgress';
final;
final;
Eliminar (HName);
WSACleanup;
final;
procedimiento TForm1.Button1Click (Remitente: TObject);
var
Host, IP, Err: cuerda;
empezar
Si GetIPFromHost (Host, IP, Err) entonces comienza
Edit1.Text: = Host;
Edit2.Text: = IP;
final
más
MessageDlg (Err, mtError, [mbOk], 0);
final;