117.info
人生若只如初见

c++如何获取本机ip

要在C++中获取本机IP地址,可以使用如下方法:

#include 
#include 
#include 
#include 

#pragma comment(lib, "ws2_32.lib")

int main() {
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cerr << "WSAStartup failed" << std::endl;
        return 1;
    }

    char hostname[256];
    if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) {
        std::cerr << "Error getting hostname" << std::endl;
        WSACleanup();
        return 1;
    }

    struct addrinfo* result = NULL;
    struct addrinfo hints;

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    if (getaddrinfo(hostname, NULL, &hints, &result) != 0) {
        std::cerr << "Error getting address info" << std::endl;
        WSACleanup();
        return 1;
    }

    struct sockaddr_in* addr = (struct sockaddr_in*) result->ai_addr;
    char ip[INET_ADDRSTRLEN];
    inet_ntop(AF_INET, &addr->sin_addr, ip, sizeof(ip));

    std::cout << "Hostname: " << hostname << std::endl;
    std::cout << "IP Address: " << ip << std::endl;

    freeaddrinfo(result);
    WSACleanup();

    return 0;
}

这段代码首先初始化Winsock库,然后使用gethostname函数获取本地主机名,接着使用getaddrinfo函数获取主机地址信息,最后通过inet_ntop函数将sockaddr_in结构体中的IP地址转换为字符串格式并输出。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe5acAzsIAARVBFU.html

推荐文章

  • c# winform组件 怎样集成

    在C# WinForms应用程序中集成组件通常涉及以下几个步骤: 添加引用: 首先,确保你已经安装了所需的组件。例如,如果你想要集成一个第三方库,你需要将该库的DLL...

  • c# winform组件 怎样提高效率

    要提高C# WinForms应用程序的效率,可以从多个方面入手,包括优化绘图过程、使用异步操作、合理设置控件属性等。以下是一些具体的优化策略:
    优化绘图过程 ...

  • c# winform组件 怎样自定义

    在C#中,要自定义WinForms组件,您需要创建一个继承自现有控件的新类,并重写其构造函数、事件处理程序和其他相关方法。以下是一个简单的示例,说明如何创建一个...

  • c# winform组件 怎样选择合适

    在C# WinForms应用程序开发中,选择合适的组件对于构建高效、用户友好的界面至关重要。以下是一些选择合适组件的建议:
    控件选择 根据需求选择:选择控件时...

  • linux更新gcc版本命令是什么

    在Linux系统中,要更新gcc编译器的版本可以通过以下命令进行:
    sudo apt-get update
    sudo apt-get install gcc 这个命令会先更新系统的软件包列表,然...

  • mysql怎么查询未提交事务

    在MySQL中,可以使用以下命令来查询未提交的事务:
    SHOW ENGINE INNODB STATUS; 执行上述命令后,会返回一个包含大量信息的结果集。在这个结果集中,可以查...

  • mysql跨服务器数据库查询怎么实现

    要实现MySQL跨服务器数据库查询,可以使用MySQL的Federated存储引擎。Federated存储引擎允许在一个MySQL服务器上建立对另一个MySQL服务器的远程连接,从而可以在...

  • mysql如何创建数据库字符集

    在MySQL中,创建数据库时可以指定字符集和校对规则。创建数据库时可以使用如下语法:
    CREATE DATABASE db_name CHARACTER SET charset_name COLLATE collat...