Skip to content

netdb.h

头文件

cpp
#include <netdb.h>

gethostbyname

cpp
// 字符串pi地址转为结构体
struct hostent *gethostbyname(const char *);

结构体 struct hostent

cpp
struct hostent {
    /* 主机名 */
    char    *h_name;    /* official name of host */
    /* 别名字符串数组 */
    char    **h_aliases;    /* alias list */
    /* 地址类型,例如:IPV4 为 AF_INET */
    int h_addrtype; /* host address type */
    /* IP地址长度,IPV4地址4,IPV6地址16 */
    int h_length;   /* length of address */
    /* 网络字节序存储的ip地址 */
    char    **h_addr_list;  /* list of addresses from name server */
    #define h_addr  h_addr_list[0]  /* address, for backward compatibility */
};

示例

cpp
#include <stdio.h>
#include <netdb.h>

int main(int argc, char const *argv[])
{
    // 字符串pi地址转为结构体,失败返回nullptr
    struct hostent *host_net = gethostbyname("127.0.0.1");

    return 0;
}

完整使用示例

cpp
#include <stdio.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <memory.h>

int main(int argc, char const *argv[])
{
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);

    // 配置网络信息
    struct sockaddr_in socket_address;
    memset(&socket_address, 0, sizeof(socket_address));
    // 协议族
    socket_address.sin_family = AF_INET;
    // 端口
    socket_address.sin_port = htons(6666);
    // 字符串pi地址转为结构体,失败返回nullptr
    struct hostent *host_net = gethostbyname("127.0.0.1");
    memcpy(&socket_address.sin_addr, host_net->h_addr, host_net->h_length);

    connect(server_fd, (struct sockaddr *)&socket_address, sizeof(socket_address));

    char *buf = "666";
    send(server_fd, buf, strlen(buf), 0);
    close(server_fd);
    return 0;
}