Compartir a través de


inet_addr función (winsock2.h)

La función inet_addr convierte una cadena que contiene una dirección decimal de puntos IPv4 en una dirección adecuada para la estructura de IN_ADDR .

Sintaxis

unsigned long WSAAPI inet_addr(
  const char *cp
);

Parámetros

cp

TBD

Valor devuelto

Si no se produce ningún error, la función inet_addr devuelve un valor long sin signo que contiene una representación binaria adecuada de la dirección de Internet especificada.

Si la cadena del parámetro cp no contiene una dirección de Internet legítima, por ejemplo, si una parte de una dirección "a.b.c.d" supera los 255, inet_addr devuelve el valor INADDR_NONE.

En Windows Server 2003 y versiones posteriores si la cadena del parámetro cp es una cadena vacía, inet_addr devuelve el valor INADDR_NONE. Si se pasa NULL en el parámetro cp , inet_addr devuelve el valor INADDR_NONE.

En Windows XP y versiones anteriores si la cadena del parámetro cp es una cadena vacía, inet_addr devuelve el valor INADDR_ANY. Si se pasa NULL en el parámetro cp , inet_addr devuelve el valor INADDR_NONE.

Comentarios

La función inet_addr interpreta la cadena de caracteres especificada por el parámetro cp . Esta cadena representa una dirección numérica de Internet expresada en el estándar de Internet ".'' Notación. El valor devuelto es un número adecuado para su uso como una dirección de Internet. Todas las direcciones de Internet se devuelven en el orden de red de ip (bytes ordenados de izquierda a derecha). Si pasa " " (un espacio) a la función inet_addr , inet_addr devuelve cero.

En Windows Vista y versiones posteriores, la función RtlIpv4StringToAddress se puede usar para convertir una representación de cadena de una dirección IPv4 en una dirección IPv4 binaria representada como una estructura de IN_ADDR . En Windows Vista y versiones posteriores, la función RtlIpv6StringToAddress se puede usar para convertir una representación de cadena de una dirección IPv6 en una dirección IPv6 binaria representada como una estructura IN6_ADDR .

Direcciones de Internet

Valores especificados mediante ".'' la notación toma una de las siguientes formas:

a.b.c.d a.b.c a.b a.b a

Cuando se especifican cuatro partes, cada una se interpreta como un byte de datos y se asigna, de izquierda a derecha, a los 4 bytes de una dirección de Internet. Cuando una dirección de Internet se ve como una cantidad de enteros de 32 bits en la arquitectura Intel, los bytes mencionados anteriormente aparecen como "d.c.b.a".". Es decir, los bytes de un procesador Intel se ordenan de derecha a izquierda.

Las partes que componen una dirección en notación "." pueden ser decimales, octales o hexadecimales como se especifica en el lenguaje C. Los números que comienzan por "0x" o "0X" implican hexadecimal. Los números que comienzan por "0" implican octal. Todos los demás números se interpretan como decimales.

Valor de dirección de Internet Significado
"4.3.2.16" Decimal
"004.003.002.020" Octal
"0x4.0x3.0x2.0x10" Hexadecimal
"4.003.002.0x10" Combinación
 

La función inet_addr admite las notaciones decimales, octales, hexadecimales y mixtas para la cadena pasada en el parámetro cp .

Nota Las notaciones siguientes solo se usan en el software berkeley, y en ningún otro lugar en Internet. Para la compatibilidad con el software berkeley, la función inet_addr también admite las notaciones adicionales especificadas a continuación.
 
Cuando se especifica una dirección de tres partes, la última parte se interpreta como una cantidad de 16 bits y se coloca en los 2 bytes más a la derecha de la dirección de red. Esto hace que el formato de dirección de tres partes sea cómodo para especificar direcciones de red de clase B como "128.net.host"'

Cuando se especifica una dirección de dos partes, la última parte se interpreta como una cantidad de 24 bits y se coloca en los 3 bytes más a la derecha de la dirección de red. Esto facilita el formato de dirección de dos partes para especificar las direcciones de red de clase A como "net.host".

Cuando solo se da una parte, el valor se almacena directamente en la dirección de red sin ninguna reorganización de bytes.

Windows Phone 8: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8 y versiones posteriores.

Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar la función inet_addr .

#define WIN32_LEAN_AND_MEAN

#include <winsock2.h>
#include <stdio.h>
#include <windows.h>


// need link with Ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")

int __cdecl main(int argc, char **argv)
{

    //-----------------------------------------
    // Declare and initialize variables
    WSADATA wsaData;
    int iResult;

    unsigned long ulAddr = INADDR_NONE;

    // Validate the parameters
    if (argc != 2) {
        printf("usage: %s <IPv4 address>\n", argv[0]);
        printf("  inetaddr converts a string containing an\n");
        printf("  IPv4 address in one of the supported formats\n");
        printf("  to a unsigned long representing an IN_ADDR\n");
        printf("      %s 192.168.16.34\n", argv[0]);
        return 1;
    }
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }

//--------------------------------
// Call inet_addr(). If the call succeeds,
// the result variable will hold a IN_ADDR
    ulAddr = inet_addr(argv[1]);
    if ( ulAddr == INADDR_NONE ) {
        printf("inet_addr failed and returned INADDR_NONE\n");
        WSACleanup();
        return 1;
    }   
    
    if (ulAddr == INADDR_ANY) {
        printf("inet_addr failed and returned INADDR_ANY\n");
        WSACleanup();
        return 1;  
    }

    printf("inet_addr returned success\n");
    
    // Here we could implement code to retrieve each address and 
    // print out the hex bytes
    // for(i=0, ptr= (Char*) &ulAddr; i < 4; i++, ptr++) {

    WSACleanup();
    return 0;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8.1, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado winsock2.h (incluya Winsock2.h, Winsock.h)
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

IN6_ADDR

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Funciones winsock

Referencia de Winsock

inet_ntoa