2010-03-10 13 views
8

Sto convertendo un codice scritto per un sistema Linux in un sistema Windows. Sto usando C++ per il mio sistema Windows e volevo sapere l'equivalente della funzione inet_aton.equivalente in windows di inet_aton

risposta

8

Windows supporta inet_pton, che ha un'interfaccia simile a inet_aton (ma funziona anche con indirizzi IPV6). È sufficiente fornire AF_INET come primo parametro, altrimenti funzionerà come inet_aton.

(Se è possibile modificare la sorgente Linux, inet_pton funzionerà anche lì).

+5

Ma è solo da Vista e sopra. su Windows XP non verrà caricato. –

10

È equivalente a Windows piuttosto che equivalente a C++, ma probabilmente si desidera inet_addr, che a mio avviso è precedente a inet_aton e che Windows supporta.

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

Tale articolo elenca inoltre, nella sezione "vedi anche", il set completo di funzioni verbosely-nome per gestire gli indirizzi IPv6 e così via.

+0

Una volta che uso inet_addr e impostare il membro s_addr della struct in_addr con il valore di ritorno, quali sono gli altri due membri del sindacato della struct in_addr? Non sono abbastanza sicuro di cosa debbano essere impostati questi (S_un_b e S_un_w). – SSS

+0

Partendo dal presupposto che posso semplicemente usare il tipo struct sockaddr al contrario del tipo sockaddr_in e quindi non dovrò preoccuparmi di S_un_b e S_un_w .... anche se mi piacerebbe comunque sapere a cosa servono. Grazie. – SSS

+0

Anche io non so perché ho trascurato il fatto che si tratta di un sindacato. Immagino che non siano necessarie ulteriori spiegazioni. – SSS

1

da eseguire in Windows XP, si può provare questo controllo:

#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