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;
}