在给定sockaddr_in结构的情况下,是否可以破译主机名?
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
struct in_addr {
unsigned long s_addr; // load with inet_pton()
};
我尝试打印出“udp_server.sin_addr.s_addr”(其中udp_server的类型为struct sockaddr_in)和它打印了一个数字。
我相信s_addr变量转换为网络长?如何将其转换为可读格式以便我确定主机?
答案 0 :(得分:2)
有许多功能可以将您提到的数字(长格式的网络地址)转换为人类可读的地址。
查看inet_pton()
和inet_ntop()
(演示文稿编号,编号到演示文稿)。那些是特定于AF_INET的,如果我没弄错的话,可以同时使用IPv4和IPv6。
Suerte!
答案 1 :(得分:1)
是的,它是网络字节顺序中的IP地址。使用inet_ntoa(3)
或inet_ntop(3)
获取IP的字符串表示形式。