2010-03-10 24 views
8

Estoy convirtiendo un código escrito para un sistema de Linux en un sistema de Windows. Estoy usando C++ para mi sistema de Windows y quería saber el equivalente de la función inet_aton.equivalente de Windows de inet_aton

Respuesta

8

Windows soporta inet_pton, que tiene una interfaz similar a inet_aton (pero que trabaja con direcciones IPv6 también). Solo suministre AF_INET como el primer parámetro, y de lo contrario funcionará como inet_aton.

(Si puede cambiar la fuente de Linux, inet_pton también funcionará allí).

+5

Pero es solo desde Vista y superior. en Windows XP no se cargará. –

10

Es el equivalente de Windows en lugar del equivalente de C++, pero probablemente quiera inet_addr, que creo que es anterior a inet_aton y compatible con Windows.

http://msdn.microsoft.com/en-us/library/ms738563.aspx

Ese artículo también se enumeran, en la sección "consulta", el conjunto completo de funciones informa extensamente con nombres de manejar direcciones IPv6 y así sucesivamente.

+0

Una vez que utilizo inet_addr y establecer el miembro S_addr de la estructura in_addr con el valor de retorno, lo que son los otros dos miembros de la unión de la estructura in_addr? No estoy muy seguro de lo que estos (S_un_b y S_un_w) deben establecerse. – SSS

+0

Supongo que puedo usar el tipo de estructura sockaddr en lugar del tipo sockaddr_in y, por lo tanto, no tendré que preocuparme por S_un_b y S_un_w .... aunque me gustaría saber para qué se usan. Gracias. – SSS

+0

Además, no sé por qué pasé por alto el hecho de que es una unión. Supongo que no se necesitan más explicaciones. – SSS

1

Para ejecutar en Windows XP, puede probar esta comprobación:

#pragma comment(lib, "Ws2_32.lib") 

sockaddr_in inaddr; 

#ifdef _WIN32_WINNT 0x0501 
    inaddr.sin_addr.s_addr =inet_addr("10.10.10.10"); //for XP 
#else 
    inet_pton(AF_INET, "10.10.10.10", &inaddr.sin_addr.s_addr); //for Vista or higher 
#endif