打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Struct sockaddr

Struct sockaddr

struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};

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

上面是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换


sockaddr_in(在netinet/in.h中定义):

struct sockaddr_in {
short int sin_family; /* Address family ... 地址族 */
unsigned short int sin_port; /* Port number ... 端口号 */
struct in_addr sin_addr; /* Internet address ... Internet地址 */
unsigned char sin_zero[8]; /* Same size as struct sockaddr ... 与struct sockaddr一样的长度 */
};

struct in_addr就是32位IP地址

struct in_addr {
unsigned long s_addr; //s_addr按照网络字节顺序存储IP地址
};

也有

typedef struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;

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


sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向
sockadd的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,
在最后用进行类型转换就可以了bzero((char*)&mysock,sizeof(mysock));//初始化
mysock结构体名
mysock.sa_family=AF_INET;
mysock.sin_addr.s_addr=inet_addr("192.168.0.1");
……
等到要做转换的时候用:
(struct sockaddr*)mysock

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
sockaddr与sockaddr
struct sockaddr 与 struct sockaddr_in的结构说明
IOS开发之查看网络链接是否可用
套接字的地址结构
Linux Socket学习(五)
sockaddr_in sockaddr in_addr区别联系
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服