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# value的操作技巧有哪些

    在C#中,可以使用以下技巧来操作值: 使用值类型:C#中有值类型和引用类型的区别。值类型直接存储在栈上,而引用类型存储在堆上。使用值类型可以提高性能并减少内...

  • c# value如何有效赋值

    在C#中,可以通过以下几种方式有效赋值给变量或属性: 直接赋值:直接使用等号将一个值赋给变量或属性。 int a = 10;
    string b = "hello"; 使用构造函数:可...

  • c# value的比较方法解析

    在C#中,比较值的方法取决于值的数据类型。以下是一些常用的比较方法: 比较数字类型值(int,double,float等):可以使用比较运算符(==,!=,>,=,

  • c# value怎样避免异常

    在C#中,可以通过多种方式来避免异常,包括: 使用try-catch块:在可能抛出异常的代码块中使用try-catch块来捕获异常,然后进行相应的处理,如输出错误消息或者执...

  • 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...