最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++實(shí)現(xiàn)枚舉網(wǎng)上鄰居信息的示例詳解

 更新時(shí)間:2023年12月06日 08:45:15   作者:微軟技術(shù)分享  
在Windows系統(tǒng)中,通過網(wǎng)絡(luò)鄰居可以方便地查看本地網(wǎng)絡(luò)中的共享資源和計(jì)算機(jī),本文將介紹一個(gè)簡單的C++程序,使用Windows API枚舉網(wǎng)絡(luò)鄰居信息,并獲取對端名稱、本機(jī)名稱、主機(jī)名稱以及主機(jī)IP等信息,文中通過代碼示例給大家講解非詳細(xì),需要的朋友可以參考下

在Windows系統(tǒng)中,通過網(wǎng)絡(luò)鄰居可以方便地查看本地網(wǎng)絡(luò)中的共享資源和計(jì)算機(jī)。通過使用Windows API中的一些網(wǎng)絡(luò)相關(guān)函數(shù),我們可以實(shí)現(xiàn)枚舉網(wǎng)絡(luò)鄰居信息的功能,獲取連接到本地網(wǎng)絡(luò)的其他計(jì)算機(jī)的相關(guān)信息。本文將介紹一個(gè)簡單的C++程序,使用Windows API枚舉網(wǎng)絡(luò)鄰居信息,并獲取對端名稱、本機(jī)名稱、主機(jī)名稱以及主機(jī)IP等信息。

引言

首先,我們需要了解一下幾個(gè)與網(wǎng)絡(luò)鄰居信息有關(guān)的Windows API函數(shù):

NETRESOURCE 結(jié)構(gòu)體是 Windows 網(wǎng)絡(luò) API 中的一個(gè)結(jié)構(gòu)體,用于描述網(wǎng)絡(luò)資源的信息。它在網(wǎng)絡(luò)資源的枚舉和連接等操作中經(jīng)常被使用。

結(jié)構(gòu)體定義

typedef struct _NETRESOURCE {
  DWORD         dwScope;
  DWORD         dwType;
  DWORD         dwDisplayType;
  DWORD         dwUsage;
  LPTSTR        lpLocalName;
  LPTSTR        lpRemoteName;
  LPTSTR        lpComment;
  LPTSTR        lpProvider;
} NETRESOURCE, *LPNETRESOURCE;

結(jié)構(gòu)體成員

  • dwScope:指定資源的可見性。可能的取值為:
    • RESOURCE_CONNECTED:表示已連接的資源。
    • RESOURCE_CONTEXT:表示會話特定的資源。
  • dwType:指定資源的類型。可能的取值為:
    • RESOURCETYPE_ANY:表示任何類型的資源。
    • RESOURCETYPE_DISK:表示磁盤資源。
    • RESOURCETYPE_PRINT:表示打印機(jī)資源。
  • dwDisplayType:指定資源的顯示類型??赡艿娜≈禐椋?ul>
  • RESOURCEDISPLAYTYPE_GENERIC:表示通用資源。
  • RESOURCEDISPLAYTYPE_DOMAIN:表示域。
  • dwUsage:指定資源的使用類型??赡艿娜≈禐椋?ul>
  • RESOURCEUSAGE_CONNECTABLE:表示資源可以連接。
  • RESOURCEUSAGE_CONTAINER:表示資源是一個(gè)容器,可以包含其他資源。
  • lpLocalName:指定本地驅(qū)動器或打印機(jī)的本地名稱。
  • lpRemoteName:指定遠(yuǎn)程共享資源的網(wǎng)絡(luò)名稱。
  • lpComment:指定資源的注釋。
  • lpProvider:指定提供資源的網(wǎng)絡(luò)提供程序的名稱。
  • WNetOpenEnum 是 Windows 網(wǎng)絡(luò)功能中的一個(gè)API函數(shù),WNetOpenEnum 通過指定的參數(shù)打開一個(gè)用于列舉網(wǎng)絡(luò)資源的枚舉句柄。這個(gè)句柄可以在后續(xù)的操作中用于獲取網(wǎng)絡(luò)資源的枚舉信息。

    函數(shù)原型

    DWORD WNetOpenEnum(
      DWORD         dwScope,
      DWORD         dwType,
      DWORD         dwUsage,
      LPNETRESOURCE lpNetResource,
      LPHANDLE      lphEnum
    );
    

    參數(shù)說明

    • dwScope:指定枚舉的范圍,可以是 RESOURCE_CONNECTED、RESOURCE_GLOBALNETRESOURCE_REMEMBEREDRESOURCE_CONTEXT 中的一個(gè)。
    • dwType:指定枚舉資源的類型,可以是 RESOURCETYPE_DISKRESOURCETYPE_PRINT、RESOURCETYPE_ANY 中的一個(gè)。
    • dwUsage:指定枚舉資源的使用類型,可以是 RESOURCEUSAGE_CONNECTABLE、RESOURCEUSAGE_CONTAINER、RESOURCEUSAGE_NOLOCALDEVICERESOURCEUSAGE_SIBLING 中的一個(gè)。
    • lpNetResource:指向 NETRESOURCE 結(jié)構(gòu)的指針,用于指定枚舉的起始位置。如果為 NULL,則從所有資源的最頂層開始枚舉。
    • lphEnum:指向句柄的指針,用于接收枚舉句柄。

    返回值

    如果函數(shù)調(diào)用成功,返回 NO_ERROR,否則返回一個(gè)錯(cuò)誤代碼,可以通過 GetLastError 函數(shù)獲取詳細(xì)信息。

    WNetEnumResource 是 Windows 網(wǎng)絡(luò)功能中的 API 函數(shù)之一,用于通過枚舉句柄獲取網(wǎng)絡(luò)資源的詳細(xì)信息,包括資源的類型、用途、本地名、遠(yuǎn)程名等信息。

    函數(shù)原型

    DWORD WNetEnumResource(
      HANDLE  hEnum,
      LPDWORD lpcCount,
      LPVOID  lpBuffer,
      LPDWORD lpBufferSize
    );
    

    參數(shù)說明

    • hEnum:枚舉句柄,通過 WNetOpenEnum 函數(shù)獲取的句柄。
    • lpcCount:指向一個(gè)變量的指針,該變量用于接收枚舉的資源數(shù)目。
    • lpBuffer:指向一個(gè)緩沖區(qū)的指針,用于接收枚舉的資源信息。
    • lpBufferSize:指向一個(gè)變量的指針,該變量用于指定或接收緩沖區(qū)的大小。

    返回值

    如果函數(shù)調(diào)用成功,返回 NO_ERROR,否則返回一個(gè)錯(cuò)誤代碼,可以通過 GetLastError 函數(shù)獲取詳細(xì)信息。

    WNetCloseEnum 函數(shù)用于關(guān)閉由 WNetOpenEnum 函數(shù)打開的網(wǎng)絡(luò)資源的枚舉句柄。在使用 WNetOpenEnum 函數(shù)枚舉網(wǎng)絡(luò)資源后,當(dāng)不再需要使用枚舉句柄時(shí),應(yīng)該通過調(diào)用 WNetCloseEnum 函數(shù)來釋放資源,避免內(nèi)存泄漏。

    函數(shù)定義

    DWORD WNetCloseEnum(
      HANDLE hEnum
    );
    

    參數(shù)

    • hEnum:網(wǎng)絡(luò)資源的枚舉句柄,該句柄是由 WNetOpenEnum 函數(shù)返回的。

    返回值

    如果函數(shù)調(diào)用成功,返回 NO_ERROR,否則返回錯(cuò)誤代碼,可以通過 GetLastError 函數(shù)獲取詳細(xì)的錯(cuò)誤信息。

    代碼實(shí)現(xiàn)

    以下是一個(gè)簡單的C++程序,使用上述API函數(shù)實(shí)現(xiàn)了枚舉網(wǎng)絡(luò)鄰居信息的功能。該程序通過遍歷枚舉得到的網(wǎng)絡(luò)資源信息,獲取對端名稱、本機(jī)名稱、主機(jī)名稱以及主機(jī)IP等信息,并輸出到控制臺。

    #include <iostream>
    #include <Windows.h>
    #include <winnetwk.h>
    
    #pragma comment(lib,"Mpr.lib")
    #pragma comment(lib,"Ws2_32.lib")
    
    // 枚舉網(wǎng)絡(luò)鄰居
    BOOL EnumNetResource()
    {
      NETRESOURCE  *NetResource = NULL;
      HANDLE  hEnum;
      unsigned  int  i;
      char szHostName[MAX_PATH] = { 0 };
      hostent *host = NULL;
      char *lpszIP = NULL;
    
      // 通過WSAStartup函數(shù)完成對Winsock服務(wù)的初始化
      WSADATA wsaData = { 0 };
      WSAStartup(MAKEWORD(2, 2), &wsaData);
    
      // 指定枚舉范圍, 獲取枚舉句柄
      WNetOpenEnum(RESOURCE_CONTEXT, NULL, NULL, NULL, &hEnum);
      if (hEnum)
      {
        DWORD  Count = 0xFFFFFFFF;
        DWORD  BufferSize = 2048;
        BYTE *pBuffer = new  BYTE[2048];
    
        // 根據(jù)設(shè)置的枚舉返回, 獲取枚舉信息
        WNetEnumResource(hEnum, &Count, pBuffer, &BufferSize);
        NetResource = (NETRESOURCE*)pBuffer;
    
        for (i = 0; i < BufferSize / sizeof(NETRESOURCE); i++, NetResource++)
        {
          // 判斷資源類型是否是所有資源 以及 判斷資源使用類型是否是容器資源
          if (NetResource->dwUsage == RESOURCEUSAGE_CONTAINER  && NetResource->dwType == RESOURCETYPE_ANY)
          {
            if (NetResource->lpRemoteName)
            {
              // 獲取遠(yuǎn)程主機(jī)名
              RtlZeroMemory(szHostName, MAX_PATH);
              lstrcpy(szHostName, (char *)((DWORD64)NetResource->lpRemoteName + 2));
    
              // 根據(jù)主機(jī)名獲取IP地址信息
              host = gethostbyname(szHostName);
              if (host == NULL)
              {
                std::cout << "錯(cuò)誤代碼" << std::endl;
                continue;
              }
    
              // 將Ipv4網(wǎng)絡(luò)地址轉(zhuǎn)換為Internet標(biāo)準(zhǔn)點(diǎn)分十進(jìn)制格式的ASCII字符串
              lpszIP = inet_ntoa(*(in_addr *)host->h_addr_list[0]);
              std::cout << "對端名稱: " << NetResource->lpRemoteName
                << " 本機(jī)名稱: " << NetResource->lpLocalName
                << " 主機(jī)名稱: " << szHostName
                << " 主機(jī)IP: " << lpszIP
                << std::endl;
            }
          }
        }
    
        // 釋放內(nèi)存并關(guān)閉句柄
        delete[]pBuffer;
        pBuffer = NULL;
        WNetCloseEnum(hEnum);
      }
      return TRUE;
    }
    
    int main(int argc, char *argv[])
    {
      EnumNetResource();
    
      system("pause");
      return 0;
    }
    

    結(jié)語

    通過這個(gè)簡單的程序,我們可以了解如何使用Windows API函數(shù)來枚舉網(wǎng)絡(luò)鄰居信息。這對于需要在程序中獲取網(wǎng)絡(luò)中其他計(jì)算機(jī)信息的場景是非常有用的。在實(shí)際應(yīng)用中,可以根據(jù)需要進(jìn)一步擴(kuò)展和優(yōu)化代碼,以滿足特定的功能需求。

    以上就是C/C++實(shí)現(xiàn)枚舉網(wǎng)上鄰居信息的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C/C++枚舉網(wǎng)上鄰居信息的資料請關(guān)注腳本之家其它相關(guān)文章!

    相關(guān)文章

    • C++11的future和promise、parkged_task使用

      C++11的future和promise、parkged_task使用

      這篇文章主要介紹了C++11的future和promise、parkged_task使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
      2020-04-04
    • C語言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)

      C語言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)

      這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)食堂就餐管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
      2019-11-11
    • 基于C語言實(shí)現(xiàn)圖書管理信息系統(tǒng)設(shè)計(jì)

      基于C語言實(shí)現(xiàn)圖書管理信息系統(tǒng)設(shè)計(jì)

      這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)圖書管理信息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
      2018-01-01
    • C++容器map和pair對組實(shí)例詳解

      C++容器map和pair對組實(shí)例詳解

      pair?是一種模板類,允許將兩個(gè)不同類型的值組合在一起,它由兩個(gè)數(shù)據(jù)成員first和second組成,分別用來保存這兩個(gè)值,這篇文章主要介紹了C++容器——map和pair對組,需要的朋友可以參考下
      2024-05-05
    • c++ static詳細(xì)使用分析

      c++ static詳細(xì)使用分析

      在C++中,static是一個(gè)關(guān)鍵字,用于聲明靜態(tài)成員、靜態(tài)局部變量以及靜態(tài)函數(shù),這篇文章主要介紹了c++ static詳細(xì)分析,需要的朋友可以參考下
      2024-05-05
    • C語言接口與實(shí)現(xiàn)方法實(shí)例詳解

      C語言接口與實(shí)現(xiàn)方法實(shí)例詳解

      這篇文章主要介紹了C語言接口與實(shí)現(xiàn)方法,包括接口的概念、實(shí)現(xiàn)方法及抽象數(shù)據(jù)類型等,并配合實(shí)例予以說明,需要的朋友可以參考下
      2014-09-09
    • C++字符串類的封裝你真的了解嗎

      C++字符串類的封裝你真的了解嗎

      這篇文章主要為大家詳細(xì)介紹了C++字符串類的封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
      2022-02-02
    • C語言多線程服務(wù)器的實(shí)現(xiàn)實(shí)例

      C語言多線程服務(wù)器的實(shí)現(xiàn)實(shí)例

      這篇文章主要介紹了C語言多線程服務(wù)器的實(shí)現(xiàn)實(shí)例,文章用實(shí)例講解的很清楚,有對這方面不太懂的同學(xué)可以參考下
      2021-02-02
    • C語言開源庫iniparser解析ini文件的方法

      C語言開源庫iniparser解析ini文件的方法

      INI(Initialization?File)文件是一種簡單直觀的數(shù)據(jù)存儲格式,常用于配置應(yīng)用程序的初始化設(shè)置,使用?iniparser?庫的應(yīng)用程序可以很方便地讀取和解析INI文件中的配置信息,大大簡化了對配置文件的處理工作,降低了程序的開發(fā)復(fù)雜度,感興趣的的朋友跟隨小編一起看看吧
      2024-04-04
    • 關(guān)于背包問題的一些理解和應(yīng)用

      關(guān)于背包問題的一些理解和應(yīng)用

      這篇文章主要介紹了關(guān)于背包問題的一些理解和應(yīng)用,本文可以說是背包問題九講的補(bǔ)充、讀后感,需要的朋友可以參考下
      2014-08-08

    最新評論

    平阳县| 平江县| 巧家县| 晴隆县| 鹤岗市| 寿宁县| 化州市| 同仁县| 徐水县| 彩票| 拜泉县| 汪清县| 洪湖市| 武陟县| 浦县| 琼结县| 朔州市| 平塘县| 大渡口区| 靖远县| 静海县| 嘉黎县| 和平县| 清水县| 南靖县| 武乡县| 开平市| 柏乡县| 阳东县| 肃北| 梧州市| 饶河县| 南川市| 永济市| 东莞市| 景宁| 长顺县| 辽阳市| 东安县| 丰都县| 蓝田县|