sockaddr_un,sockaddr和sockaddr_in使用区别

1.sockaddr_un

该结构用于系统通讯,同一台主机上客户端和服务器通讯

Unix域协议并不是一个实际的协议族,它只是在同一台主机上进行客户-服务器通信时,使用与在不同主机上的客户和服务器间通信时相同的API(套接口或XTI)的一种方法。当客户和服务器在同一台主机上时,Unix域协议是IPC通信方式的一种替代品。

Unix域提供了两种类型的套接口:字节流套接口(与TCP类似)和数据报套接口(与UDP类似)。

// 在《sys/un.h>头文件中定义的Unix域套接口地址结构
struct sockaddr_un
{
     uint8_t sun_len;
     sa_family_t sun_family;   /* AF_LOCAL */
     char sun_path[104];       /* null-terminated pathname */
};

==============================

 2.sockaddr

该结构用于IPV4协议和IPV6协议

sa_family是地址家族,一般是“AF_xxx”的形式。通常大多用的是都是AF_INET和AF_INET6。
sa_data是14字节协议地址。
数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息,兼容IPv4和IPv6

 struct  sockaddr                //通用地址结构体(兼容ipv4和ipv6)
 {
    unsigned short sa_family;   //地址协议类型  AF_INET或者AF_INET6
    char sa_data[14];           //存放要绑定的ip和端口号
  }                       

================================

3.sockaddr_in

该结构专门用于IPV4协议

sin_family指代协议族,在socket编程中只能是AF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
s_addr按照网络字节顺序存储IP地址

 struct sockaddr_in   //ipv4地址结构体(专门用来存放ipv4地址)
                         {
                            short int sin_family;           //存放地址协议族 AF_INET
                            unsigned short int sin_port;     //存放你要绑定的端口号
                            struct in_addr sin_addr;    //结构体嵌套,存放你要绑定的ipv4地址
                            unsigned char sin_zero[8];  /* Same size as struct sockaddr */
                         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值