SOCKADDR_IN结构中的sin_family ,sin_addr各是什么具体意思?有什么区别?最好讲得通俗点,谢谢各位高手
2个回答
展开全部
先贴上头文件内的定义;
struct sockaddr_in
{
__kernel_sa_family_t sin_family; /* Address family */
__be16 sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
/* Pad to size of `struct sockaddr'. */
unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
/* Internet address. */
struct in_addr
{
__be32 s_addr;
};
区别:
把结构体内对应的这些位,填上IPv4的010101010101,然后计算机就能识别,你这个是IPv4
sturct sockaddr_in server_addr.sin_family = AF_INET;
这个是IP地址,并且要复合上面设置的sin_family类型(IPv4 or IPv6),
htonl()把字符串(127.0.0.1)转换成01010101010101这样的二进制
htonl()也可以跟宏,另外这里又牵涉到大端,小端的问题,自行去查资料,不说了
sturct sockaddr_in server_addr.sin_addr.s_addr = htonl(INADDE_ANY);
*友情提示:在使用这个结构体前,
最好先 bzero((struct sockaddr * )&server_addr, size_t addrlen);//所有位致0
因为,后面IPv4 结构体 struct sockaddr_in 后面有8个字节的填充位,你不致0,会出现一些毛病
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询