SOCKADDR_IN结构中的sin_family ,sin_addr各是什么具体意思?有什么区别?最好讲得通俗点,谢谢各位高手
答案:2 悬赏:30 手机版
解决时间 2021-12-03 06:35
- 提问者网友:容嬷嬷拿针来
- 2021-12-02 08:31
SOCKADDR_IN结构中的sin_family ,sin_addr各是什么具体意思?有什么区别?最好讲得通俗点,谢谢各位高手
最佳答案
- 五星知识达人网友:何以畏孤独
- 2021-12-02 09:02
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地址");
sin_addr是一个联合体,用联合体就可以使用多种方式表示IP地址。一般我们使用其中的最后一种方式,即用无符号长整型数据来表示IP地址。此时,用的是s_nu数据成员,s_un是一个结构体,其中只有一个数据成员,即s_addr。
使用方式:
变量.sin_family=AF_INET;
变量.sin_addr.S_un.S.addr=htonl("IP地址");
全部回答
- 1楼网友:天凉才是好个秋
- 2021-12-02 09:28
先贴上头文件内的定义;
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);
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,会出现一些毛病
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯