首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用C++显示连接到网络的设备的名称和IP地址

使用C++显示连接到网络的设备的名称和IP地址可以通过以下步骤实现:

  1. 引入必要的头文件和库:
代码语言:txt
复制
#include <iostream>
#include <string>
#include <vector>
#include <winsock2.h>
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
  1. 定义一个函数来获取设备的名称和IP地址:
代码语言:txt
复制
void GetNetworkDevices(std::vector<std::string>& deviceNames, std::vector<std::string>& ipAddresses) {
    // 初始化Winsock
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cout << "Failed to initialize Winsock." << std::endl;
        return;
    }

    // 获取网络接口信息
    ULONG bufferSize = 0;
    if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, nullptr, &bufferSize) == ERROR_BUFFER_OVERFLOW) {
        IP_ADAPTER_ADDRESSES* adapterAddresses = reinterpret_cast<IP_ADAPTER_ADDRESSES*>(new char[bufferSize]);
        if (GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, adapterAddresses, &bufferSize) == NO_ERROR) {
            IP_ADAPTER_ADDRESSES* adapter = adapterAddresses;
            while (adapter != nullptr) {
                // 获取设备名称
                std::string deviceName = adapter->FriendlyName;
                deviceNames.push_back(deviceName);

                // 获取IP地址
                IP_ADAPTER_UNICAST_ADDRESS* unicastAddress = adapter->FirstUnicastAddress;
                while (unicastAddress != nullptr) {
                    sockaddr* address = unicastAddress->Address.lpSockaddr;
                    if (address->sa_family == AF_INET) {
                        sockaddr_in* ipv4Address = reinterpret_cast<sockaddr_in*>(address);
                        char ipAddress[INET_ADDRSTRLEN];
                        inet_ntop(AF_INET, &(ipv4Address->sin_addr), ipAddress, INET_ADDRSTRLEN);
                        ipAddresses.push_back(ipAddress);
                    }
                    unicastAddress = unicastAddress->Next;
                }

                adapter = adapter->Next;
            }
        }
        delete[] reinterpret_cast<char*>(adapterAddresses);
    }

    // 清理Winsock
    WSACleanup();
}
  1. 在主函数中调用该函数并打印设备的名称和IP地址:
代码语言:txt
复制
int main() {
    std::vector<std::string> deviceNames;
    std::vector<std::string> ipAddresses;

    GetNetworkDevices(deviceNames, ipAddresses);

    for (size_t i = 0; i < deviceNames.size(); ++i) {
        std::cout << "Device Name: " << deviceNames[i] << std::endl;
        std::cout << "IP Address: " << ipAddresses[i] << std::endl;
        std::cout << std::endl;
    }

    return 0;
}

这样,运行程序后,就可以显示连接到网络的设备的名称和IP地址了。

请注意,以上代码是基于Windows平台的实现。如果在其他操作系统上运行,可能需要进行相应的修改。此外,该代码仅获取IPv4地址,如果需要获取IPv6地址,可以进行相应的扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的结果

领券