永发信息网

SOCKADDR_IN结构中的sin_family ,sin_addr各是什么具体意思?有什么区别?最好讲得通俗点,谢谢各位高手

答案:2  悬赏:30  手机版
解决时间 2021-12-03 06:35
SOCKADDR_IN结构中的sin_family ,sin_addr各是什么具体意思?有什么区别?最好讲得通俗点,谢谢各位高手
最佳答案
sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。
sin_addr是一个联合体,用联合体就可以使用多种方式表示IP地址。一般我们使用其中的最后一种方式,即用无符号长整型数据来表示IP地址。此时,用的是s_nu数据成员,s_un是一个结构体,其中只有一个数据成员,即s_addr。
使用方式:
变量.sin_family=AF_INET;
变量.sin_addr.S_un.S.addr=htonl("IP地址");
全部回答
先贴上头文件内的定义;
struct sockaddr_in
{
__kernel_sa_family_t sin_family; 
__be16 sin_port; 
struct in_addr sin_addr; 

unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};


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,会出现一些毛病

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
用acquaint…with…
深圳横哪里有换手表镜面的
请你根据下面图画写一篇短文,描述其图画内容
对于建材购买大家会选择那个网站?
我想在辽中满都户信用社贷款小额用什么手续
我测试4分钟 这样的温度正常吗
我的世界服务器怎么生成虚空世界
断笺。 这个词什么意思
求救——更换了电脑主板不会插线
有哪些减肥操?除了郑多燕
尚剪发型设计地址在什么地方,想过去办事,
“一梳梳到尾,二梳白发齐眉”全文是怎样的?
900和1000马力拖拉机对比
翁心存的藏书之家
冷了的姣子怎样下不烂
推荐资讯
圣地安列斯的火箭助行器怎么用?
初中操行评定不合格就能拿毕业证吗
我是一个已婚女人…喜欢上一个男人?他提出拥
烤箱烤红薯怎么考成黄色
这个能直接计算吗
是步甲幼虫吗,他吃什么啊
选出对“师”的用法分类正确的一项①古之学者
丛庐江出发到合肥海洋馆怎么走?
谁可以帮我查一下惠普笔记本i5 2450M价格,谢
买来柚子时间长里面干了怎么办
My father used to on weekends,but
关于小尾指的问题
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?