从sockaddr_storage中检索ip和端口

Kai*_*aan 7 c sockets winsock

我有一个sockaddr_storage包含远程主机的ipv4地址和端口.我之前没有见过这些struct,我不知道如何把它转换成struct我可以直接检索IP地址和端口号的地方.我试过谷歌搜索struct但没有找到任何东西.有关如何做到这一点的任何建议?

谢谢

R..*_*R.. 5

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

更好的方法是将指针传递给getnameinfowith NI_NUMERICHOSTNI_NUMERICSERVflags以获取地址和端口的字符串表示.这样做的优点是它既支持IPv4又支持IPv6,无需额外代码,理论上也支持所有未来的地址类型.您可能必须将指针强制转换void *(或struct sockaddr *明确地,如果您正在使用C++)将其传递给它getnameinfo,但这不应该导致问题.