2010-03-10 2 views
8

Я конвертирую код, написанный для системы Linux в систему Windows. Я использую C++ для моей системы Windows и хочу знать эквивалент функции inet_aton.windows эквивалент inet_aton

ответ

8

Windows поддерживает inet_pton, который имеет аналогичный интерфейс с inet_aton (но это также работает с адресами IPV6). Просто поставьте AF_INET в качестве первого параметра, и в противном случае он будет работать как inet_aton.

(Если вы можете изменить источник Linux, inet_pton также будет работать там).

+5

Но это только от Vista и выше. в Windows XP он не загрузится. –

10

Это эквивалент Windows, а не эквивалент C++, но, вероятно, вы хотите inet_addr, который, как я полагаю, предшествует inet_aton и какая Windows поддерживает.

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

В этой статье также перечислены в разделе «смотри также», полный набор пространно названных функций для обработки IPv6-адреса и так далее.

+0

После того, как я использую inet_addr и установить элемент S_addr из in_addr структуры с возвращаемым значением, чем две другие члены союза структуры in_addr? Я не совсем уверен, что нужно установить (S_un_b и S_un_w). – SSS

+0

Я предполагаю, что могу просто использовать тип структуры sockaddr, а не тип sockaddr_in, и поэтому вам не нужно беспокоиться о S_un_b и S_un_w .... хотя мне все равно хотелось бы знать, для чего они используются. Благодарю. – SSS

+0

Также я не знаю, почему я забыл, что это союз. Думаю, никаких дальнейших объяснений не требуется. – SSS

1

Для запуска в Windows XP, вы можете попробовать эту проверку:

#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 
Смежные вопросы