2010-03-10 10 views
8

Bir linux sistemi için yazılmış bazı kodları bir windows sistemine dönüştürüyorum. Windows sistemim için C++ kullanıyorum ve inet_aton işlevinin eşdeğerini bilmek istedim.windows inet_aton eşdeğeri

cevap

8

Windows, inet_aton ile benzer bir arabirime sahip olan inet_pton'u desteklemektedir (ancak bu, IPV6 adresleriyle de çalışır). İlk parametre olarak AF_INET kaynağı verin ve aksi takdirde inet_aton gibi çalışır.

(Linux kaynağını değiştirebilirseniz, inet_pton da orada çalışacaktır). Windows XP çalıştırmak için

+5

Ama sadece Vista ve üstü. Windows XP'de yüklenemedi. –

10

Bu, Windows eşdeğeri yerine C++ eşdeğeri, ancak inet_addr, inet_aton ve hangi Windows'un desteklediğine inanıyorum.

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

O makale de listeler, "ayrıca bkz" bölümünde, verbosely adlı fonksiyonların tam set vb IPv6 adreslerini ele ve.

+0

Ben inet_addr kullanmak ve yapının diğer iki sendika üyesi ne dönüş değeri ile in_addr yapının S_addr üyesi belirledikten sonra in_addr? Bunların (S_un_b ve S_un_w) ayarlanması gerektiğinden emin değilim. – SSS

+0

Sadece sockaddr_in türünün aksine sockaddr yapı türünü kullanabileceğimi ve bu nedenle S_un_b ve S_un_w .... hakkında endişelenmenize gerek olmayacağımı farz ediyorum. Yine de ne için kullanıldığını bilmek isterim. Teşekkürler. – SSS

+0

Ayrıca neden bir sendika olduğu gerçeğini gözden kaçırdığımı bilmiyorum. Daha fazla açıklama gerekmiyor sanırım. – SSS

1

, bu kontrolü deneyebilirsiniz:

#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