ドメイン名によるIPアドレスの取得


struct  hostent {
        char    FAR * h_name;           /* official name of host */
        char    FAR * FAR * h_aliases;  /* alias list */
        short   h_addrtype;             /* host address type */
        short   h_length;               /* length of address */
        char    FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr  h_addr_list[0]          /* address, for backward compat */
};



typedef struct in_addr {
        union {
                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { USHORT s_w1,s_w2; } S_un_w;
                ULONG S_addr;
        } S_un;
#define s_addr  S_un.S_addr /* can be used for most tcp & ip code */
#define s_host  S_un.S_un_b.s_b2    // host on imp
#define s_net   S_un.S_un_b.s_b1    // network
#define s_imp   S_un.S_un_w.s_w2    // imp
#define s_impno S_un.S_un_b.s_b4    // imp #
#define s_lh    S_un.S_un_b.s_b3    // logical host
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;



typedef struct sockaddr_in {

#if(_WIN32_WINNT < 0x0600)
    short   sin_family;    
#else //(_WIN32_WINNT < 0x0600)
    ADDRESS_FAMILY sin_family;
#endif //(_WIN32_WINNT < 0x0600)

    USHORT sin_port;
    IN_ADDR sin_addr;
    CHAR sin_zero[8];
} SOCKADDR_IN, *PSOCKADDR_IN;




typedef struct sockaddr {

#if (_WIN32_WINNT < 0x0600)
    u_short sa_family;
#else 
    ADDRESS_FAMILY sa_family;           // Address family.
#endif //(_WIN32_WINNT < 0x0600)

    CHAR sa_data[14];                   // Up to 14 bytes of direct address.
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;	
#include 
#include 
#include 
#include 
#pragma comment(lib, "ws2_32.lib")

int tcp_gethost(const char *addr, struct in_addr *inaddr)
{
	unsigned long iadd = -1;
	iadd = inet_addr((char*)addr);
	if (iadd != -1) {
		memcpy(inaddr, (const void*)&iadd, sizeof(iadd));
		return 0;
	}
	struct hostent *host = NULL;
	host = gethostbyname(addr);
	if (host) {
		memcpy(inaddr, host->h_addr, host->h_length);
		return 0;
	}	
	return -1;
}

int main(int argc, char **argv)
{
	WSADATA wsaData;
	int iResult;
	iResult = WSAStartup(MAKEWORD(2,2),&wsaData);
	if(iResult != 0)
	{
		printf("     !
"); return NULL; } struct sockaddr_in sockaddrin; struct in_addr *inaddr = &sockaddrin.sin_addr; tcp_gethost("www.baidu.com", inaddr); char *ip = inet_ntoa(sockaddrin.sin_addr); printf("ip:%s
", ip); getchar(); return 0; }