我现在正在用VC++编写一个网络教学程序,不过不知道在网络当中如何才能得到本地以及其他的计算机的IP地址和计算机名。希望能够得到各位大虾的帮助,我将万分感激(最好有源代码)谢谢!!!!!!

解决方案 »

  1.   

    有一个枚举网络资源的API函数的不过名字我忘了,
    你查一下enumNETWORD之类的词吧好像跟这几个词有关的。
      

  2.   

    人民邮电出版社,VisualC++6.0实效编程百例,有你的问题(有源码)
      

  3.   

    你给email,我给你一个源码(哥们分少了点吧)
      

  4.   

    //这个函数,在列举局域网机器的同时,也解析出IP地址
    bool EnumNetResource(LPNETRESOURCE lpNR, DWORD dwScope,DWORD dwType,CStringArray* hList)
    {
    //注意:hList是用来显示被列举出的机器名字的LIST
        HANDLE hEnum = 0;
    DWORD i;
        bool bRet=true;
        DWORD dwEntries = 0xFFFFFFFF ;    // enumerate all possible entries
        NETRESOURCE NR[1024];
        DWORD dwBuffer=1024*sizeof(NETRESOURCE);
        DWORD dwResult = WNetOpenEnum(
                dwScope,    // scope of enumeration
                dwType,        // resource types to list
                0,        // enumerate all resources
                lpNR,        // pointer to resource structure (NULL at first time)
                &hEnum        // handle to resource
                ) ;
        if(dwResult != NO_ERROR ) return false;
        while(1)
    {
            dwResult =WNetEnumResource(hEnum,&dwEntries,(LPVOID)NR,&dwBuffer);
            if(dwResult==ERROR_NO_MORE_ITEMS )
    break;
    else
    {
    if(dwResult != NO_ERROR ) 
    {
    bRet=false;
    break;
    }
    }
            for(i = 0 ; i < dwEntries ; i++ ) 
    {
                if(NR[i].dwDisplayType==RESOURCEDISPLAYTYPE_SERVER) //(NR[i].dwUsage == RESOURCEUSAGE_CONTAINER&&NR[i].dwType == RESOURCETYPE_ANY)
    {
                    char *p=NR[i].lpRemoteName;
                    while(*p=='\\') p++;
    //这里,P指向列举出的资源!!!!!!!!!!!
    {
    u_long t,y,*lq;char lp[200];
    u_char q[4]={0};//unsigned short n=nPort;
    HOSTENT *lphto;HOSTENT hto;
    t=y=0;
    lphto=gethostbyname(p);
    if(lphto!=NULL)
    {
    hto=*lphto;
    t=*((unsigned long*)hto.h_addr_list[0]);
    y=(u_long)ntohl(t);
    lq=(u_long *)q;
    *lq=t;
    sprintf(lp,"%s   (%d.%d.%d.%d)",p,(u_long)q[0],(u_long)q[1],(u_long)q[2],(u_long)q[3]);
    }
    else
    sprintf(lp,"%s   (不能解析的IP地址)",p);
    //ListBox_AddString(hList,lp);
    hList->Add(lp);
    }
                } 
    else 
    {
    if((NR[i].dwUsage&RESOURCEUSAGE_CONTAINER)==RESOURCEUSAGE_CONTAINER) 
    {
    //bRet=EnumNetResource(&NR[i],dwScope,dwType,hList);
    //if(bRet==false)
    // break;
    }
    }
            }
            if(bRet==false)
    break;
        }
        WNetCloseEnum(hEnum) ;
        return bRet;
    }