【问题标题】:In C++/Windows how do I get the network name of the computer I'm on?在 C++/Windows 中,如何获取我所在计算机的网络名称?
【发布时间】:2010-09-05 21:12:36
【问题描述】:

在我正在处理的 C++ Windows(XP 和 NT,如果有区别的话)应用程序中,我需要获取与正在执行代码的计算机关联的网络名称,以便我可以将本地文件名从C:\filename.ext 到 \\network_name\C$\filename.ext。我该怎么做?

或者,如果有一个函数可以进行我描述的转换,那就更好了。我查看了 WNetGetUniversalName,但这似乎不适用于本地(C 驱动器)文件。

【问题讨论】:

    标签: c++ windows-xp networking windows-nt


    【解决方案1】:

    有不止一种选择:

    一个。按照 Stu 的建议使用 Win32 的 GetComputerName()。
    示例:http://www.techbytes.ca/techbyte97.html

    湾。使用 Winsock 下的函数 gethostname()。此功能是跨平台的,如果您的应用程序要在 Windows 以外的其他平台上运行,可能会有所帮助。
    MSDN 参考:http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx

    C。使用函数 getaddrinfo()。
    MSDN 参考:http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

    【讨论】:

    • 很遗憾,a) (techbytes.ca) 的链接似乎不再可用。
    【解决方案2】:

    你需要 Win32 的 GetComputerName:

    http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx

    【讨论】:

      【解决方案3】:

      我同意 Pascal 关于使用 winsock 的 gethostname() 函数的观点。 给你:

      #include <winsock2.h> //of course this is the way to go on windows only
      
      #pragma comment(lib, "Ws2_32.lib")
      
      void GetHostName(std::string& host_name)
      {
          WSAData wsa_data;
          int ret_code;
      
          char buf[MAX_PATH];
      
          WSAStartup(MAKEWORD(1, 1), &wsa_data);
          ret_code = gethostname(buf, MAX_PATH);
      
          if (ret_code == SOCKET_ERROR)
              host_name = "unknown";
          else
              host_name = buf;
      
      
          WSACleanup();
      
      }
      

      【讨论】:

        【解决方案4】:

        如果您只需要本地计算机的名称 (NetBIOS),请使用 GetComputerName 函数。它只检索在系统启动时建立的本地计算机名称,当系统从注册表中读取它时。

        BOOL WINAPI GetComputerName(
          _Out_   LPTSTR  lpBuffer,
         _Inout_ LPDWORD lpnSize
        );
        

        更多关于GetComputerName

        如果要获取 DNS 主机名、DNS 域名或完全限定的 DNS 名称,请调用 GetComputerNameEx 函数。

        BOOL WINAPI GetComputerNameEx(
          _In_    COMPUTER_NAME_FORMAT NameType,
          _Out_   LPTSTR               lpBuffer,
          _Inout_ LPDWORD              lpnSize
        );
        

        更多关于GetComputerNameEx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-25
          • 2011-09-04
          • 2010-10-02
          • 1970-01-01
          • 2021-07-07
          • 2011-07-31
          • 2014-03-20
          相关资源
          最近更新 更多