c - 从 sockaddr_storage 检索 ip 和端口

标签 c sockets winsock

我有一个 sockaddr_storage 包含远程主机的 ipv4 地址和端口。不过,我以前从未见过这些 struct,而且我不确定如何将其转换为可以直接检索 IP 地址和端口号的 struct。我试过用谷歌搜索 struct 但没有找到任何东西。有关如何执行此操作的任何建议?

谢谢

最佳答案

您可以将指针转换为 struct sockaddr_in *struct sockaddr_in6 * 并直接访问成员,但这将打开一堆关于别名违规和错误编译的蠕虫病毒问题。

更好的方法是将指针传递给带有 NI_NUMERICHOSTNI_NUMERICSERV 标志的 getnameinfo 以获得地址的字符串表示形式,港口。这样做的好处是无需额外代码即可同时支持 IPv4 和 IPv6,并且理论上也支持所有 future 的地址类型。您可能必须将指针强制转换为 void *(或 struct sockaddr *,如果您使用的是 C++)以将其传递给 getnameinfo ,但这应该不会造成问题。

关于c - 从 sockaddr_storage 检索 ip 和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335738/

相关文章:

c - arduino 字节数据类型,在 c 中使用 uint8_t 或 unsigned char?

c - 启用和禁用内核中断如何防止竞争条件?

linux - telnet 自动化脚本有时会失败

c++ - 如何使用 getnameinfo 而不是 gethostbyname?

c++ - IO 完成端口 : How does WSARecv() work?

c - TCP 客户端无法将字符串发送到服务器

c - Windows 套接字错误代码 10055

c++ - Winsock 多客户端多线程,电脑辛苦了

c - 如何在 Windows 上使用 getaddrinfo()

c - 位图文件没有以正确的顺序保存在内存中