gpt4 book ai didi

c++ - 如何从 sockaddr 获取 IP 地址

转载 作者:IT老高 更新时间:2023-10-28 12:58:49 24 4
gpt4 key购买 nike

我想在调用accept后尝试获取客户端的IP地址。这是我到目前为止所拥有的,但我最终得到了一些显然不是 IP 地址的长数字。有什么问题?

int tcp_sock = socket(AF_INET, SOCK_STREAM, 0);

sockaddr_in client;
client.sin_family = AF_INET;
socklen_t c_len = sizeof(client);

int acc_tcp_sock = accept(tcp_sock, (sockaddr*)&client, &c_len);
cout << "Connected to: " << client.sin_addr.s_addr << endl;

最佳答案

http://beej.us/guide/bgnet/examples/client.c 看到:

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
if (sa->sa_family == AF_INET)
return &(((struct sockaddr_in*)sa)->sin_addr);
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}

// [...]

struct addrinfo *p;
char s[INET6_ADDRSTRLEN];
inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof s);

它使用 inet_ntop,优于 inet_ntoa(非线程安全),因为它处理 IPv4 和 IPv6(AF_INETAF_INET6) 并且我认为应该是线程安全的。

关于c++ - 如何从 sockaddr 获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1824279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com