2010-03-10 26 views

Odpowiedz

8

System Windows obsługuje inet_pton, który ma podobny interfejs do inet_aton (ale działa również z adresami IPV6). Po prostu podaj AF_INET jako pierwszy parametr, a inaczej będzie działał jak inet_aton.

(Jeśli możesz zmienić źródło Linuksa, zadziała tam również inet_pton).

+5

Ale jest tylko z Vista i wyżej. w systemie Windows XP nie uda się załadować. –

10

To odpowiednik Windowsa, a nie odpowiednik C++, ale prawdopodobnie chcesz inet_addr, który, jak sądzę, poprzedza inet_aton i który system Windows obsługuje.

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

Artykuł ten wymienia również w sekcji „Zobacz też”, pełny zestaw --long nazwie funkcji do obsługi adresów IPv6 i tak dalej.

+0

Gdy używam inet_addr i ustawić członek s_addr struct in_addr ze zwracanej wartości, jakie są dwaj inni członkowie Związku struct in_addr? Nie jestem do końca pewien, na co te (S_un_b i S_un_w) muszą być ustawione. – SSS

+0

Zakładam, że mogę po prostu użyć typu struct sockaddr w przeciwieństwie do typu sockaddr_in i dlatego nie będę musiał się martwić o S_un_b i S_un_w .... chociaż nadal chciałbym wiedzieć, do czego są używane. Dzięki. – SSS

+0

Również nie wiem, dlaczego przeoczyłem fakt, że jest to związek. Chyba żadne dalsze wyjaśnienia nie są potrzebne. – SSS

1

Aby uruchomić w systemie Windows XP, możesz spróbować tej kontroli:

#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 
Powiązane problemy