全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1680
推到 Plurk!
推到 Facebook!

怎樣搜索區域網路的電腦

 
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-26 10:19:10 IP:61.218.xxx.xxx 未訂閱

怎樣搜索區域網路的電腦

作者:JiShiPing(季世平) 資料來源: http://www.ccrun.com/ 在一個區域網路上,網路編程IP相關問題 1.怎麼搜索區域網路上的電腦? 2.怎樣通過一個電腦的IP位址獲得其網路卡MAC位址? 例如,我的電腦為A,局域網上的有另外一台電腦為B,怎樣在A上通過B的IP位址獲取B的網路卡MAC位址? 如何編程用C++Builder編程實現? //------------來自JiShiPing(JSP季世平)的代碼:---------------
#include    < winnetwk.h  >  
#include    < winsock2.h  >  
//---------------------------------------------------------------------------  
__fastcall  TForm1::TForm1(TComponent*  Owner)  
               :  TForm(Owner)  
{  
}  
//---------------------------------------------------------------------------      //---------------------------------------------------------------------------      void  __fastcall  TForm1::FormCreate(TObject  *Sender)  
{  
   TStrings  *netList=new  TStringList();  
   TListItem  *NewItem;  
   //  
   ListView1-  >Items-  >Clear();  
   Screen-  >Cursor=crHourGlass;  
   //  
   EnumNetResource(netList,NULL,RESOURCE_GLOBALNET,RESOURCETYPE_ANY);         for(int  i=0;i  Count;i  )  
   {  
     NewItem=ListView1-  >Items-  >Add();  
     NewItem-  >Caption=netList-  >Strings[i];  
     NewItem-  >SubItems-  >Add(gethostip(netList-  >Strings[i]));  
   }  
   Screen-  >Cursor=crDefault;  
   delete  netList;  
}  
//---------------------------------------------------------------------------  
bool  __fastcall  TForm1::EnumNetResource(TStrings  *rcList,LPNETRESOURCE  lpNR,  DWORD  dwScope,DWORD  dwType)  
{  
   HANDLE  hEnum  =  0;  //  resource-handle  
   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;  
   bool  bRet=true;  
   DWORD  dwEntries  =  0xFFFFFFFF  ;  //  enumerate  all  possible  entries  
   NETRESOURCE  NR[1024];  
   DWORD  dwBuffer=1024*sizeof(NETRESOURCE);  
   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(DWORD  i  =  0  ;  i    <  dwEntries  ;  i    )  
   {  
     if(NR[i].dwDisplayType==RESOURCEDISPLAYTYPE_SERVER)  
     {  
       char  *p=NR[i].lpRemoteName;  
       while(*p=='\\')  p  ;  
     if(*p)  rcList-  >Add(p);  
     }  
     else  if((NR[i].dwUsage&RESOURCEUSAGE_CONTAINER)==RESOURCEUSAGE_CONTAINER)  
     {  
       bRet=EnumNetResource(rcList,&NR[i],dwScope,dwType);  
       if(bRet==false)  break;  
     }  
   }  
     if(bRet==false)  break;  
   }  
   WNetCloseEnum(hEnum)  ;  
   return  bRet;  
}  
//------獲取某主機的IP地址,如果主機名為空,則返回本機的名和IP地址---------
//AnsiString  gethostip(AnsiString  &host)  
AnsiString  __fastcall  TForm1::gethostip(AnsiString  &host)  
{  
   WSADATA  wsaData;  
   AnsiString  IP;  
   WSAStartup(MAKEWORD(2,0),&wsaData);  
   if(host.IsEmpty())  
   {  
     char  hostname[128];  
     if(gethostname(hostname,128)!=0)  return  AnsiString(  "  ");  
     host=hostname;  
   }  
   try  
   {  
     struct  hostent  *hp=gethostbyname(host.c_str());  
     if(WSAGetLastError()==WSAHOST_NOT_FOUND)  
     {  
       IP=  "無法獲取  ";  
       return  IP;  
     }  
     else  
     IP=inet_ntoa(*(struct  in_addr*)hp-  >h_addr_list[0]);  
     }  
   catch(...)  
   {  
     IP=  "  ";  
   }  
   WSACleanup();  
   return  IP;  
}  
聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
系統時間:2024-04-16 12:00:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!