获取ip地址失败,小弟我认为是字符编码的原因,有时间的帮忙看看

获取ip地址失败,我认为是字符编码的原因,有时间的帮忙看看啊
本帖最后由 oyljerry 于 2013-03-22 17:25:16 编辑
        

        WSADATA wsadata;
if(0!=WSAStartup(MAKEWORD(2,2),&wsadata))//初始化
{
   AfxMessageBox(_T("初始化网络环境失败!"));
   return true;
}
char name[255];
gethostname(name,sizeof(name));
hostent *p=gethostbyname(name);
if(p!=NULL)
{
DWORD dwNum = MultiByteToWideChar(CP_ACP,0,(char *)p->h_addr_list,-1,NULL,0);  
wchar_t *pwAddr;  
pwAddr = new wchar_t[dwNum];  
pwAddr=(wchar_t*)p->h_addr_list;
m_Addr.SetWindowTextW(pwAddr);
if(!pwAddr)  
{  
  delete []pwAddr;  
}  
}
        

------解决方案--------------------
typedef struct hostent {
    char FAR      *h_name;
    char FAR  FAR **h_aliases;
    short         h_addrtype;
    short         h_length;
    char FAR  FAR **h_addr_list;
  } HOSTENT, *PHOSTENT, FAR *LPHOSTENT;

h_addr_list :
A NULL-terminated list of addresses for the host. Addresses are returned in network byte order. The macro h_addr is defined to be h_addr_list[0] for compatibility with older software. 

是指向 DWORD 数组,每个item是一个地址,最后一个item是0,可以通过inet_ntoa转成字符串形式


 #define WIN32_LEAN_AND_MEAN
  
  #include <winsock2.h>
  #include <ws2tcpip.h>
  #include <stdio.h>
  
  // Need to link with Ws2_32.lib
  
  #pragma comment(lib, "ws2_32.lib")
  
  int main(int argc, char **argv)
  {
  
      //-----------------------------------------
  
      // Declare and initialize variables
  
      WSADATA wsaData;
      int iResult;
  
      DWORD dwError;
      int i = 0;
  
      struct hostent *remoteHost;
      char *host_name;
      struct in_addr addr;
  
      char **pAlias;
  
      // Validate the parameters
  
      if (argc != 2) {
          printf("usage: %s ipv4address\n", argv[0]);
          printf(" or\n");
          printf("       %s hostname\n", argv[0]);