sockaddr与sockaddr_in结构体详细讲解 二者区别

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等函数的参数,指明地址信息。

但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构

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 */

unsigned char sin_zero[8];         /* Same size as struct sockaddr */

};

struct in_addr {

unsigned long s_addr;

};

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两个数据结构保持大小相同而保留的空字节。

s_addr按照网络字节顺序存储IP地址

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

c语言sockaddr_in结构体,转:sockaddr与sockaddr_in结构体详细讲解相关推荐

  1. linux下C语言套接字编程sockaddr和sockaddr_in的区别

    tcp建立后,我想linux的服务端可以为每个连接的ip地址分配编号,方便进行每个客户端进行数据交互.所以我要知道每个连接的ip地址. struct sockaddr和struct sockaddr_ ...

  2. (摘录)sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    struct sockaddr { unsigned short sa_family;     /* address family, AF_xxx */ char sa_data[14];       ...

  3. sockaddr,sockaddr_in,sockaddr_un结构体详细讲解

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

  4. sockaddr与sockaddr_in,sockaddr_un结构体详解

    struct sockaddr { unsigned short sa_family;     /* address family, AF_xxx */ char sa_data[14];       ...

  5. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

  6. sockaddr与sockaddr_in结构体简介

    struct sockaddr {unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 byte ...

  7. 结构体sockaddr、sockaddr_in、sockaddr_in6之间的区别和联系

    本文转自https://blog.csdn.net/albertsh/article/details/80991684,简单易懂,赞. 前言 最近在学习网络相关的知识,虽然之前代码写了不少,但是长时间 ...

  8. C语言Socket编程为什么要将sockaddr_in强制转换成sockaddr?

    在阅读尹圣雨<TCP/IP网络编程>(C语言示例)的时候,看到将sockaddr_in类型的struct的指针强制转换成了sockaddr类型的指针. 比如hello_client.c: ...

  9. linux网络编程之地址结构sockaddr和sockaddr_in的区别

    1.介绍sockaddr 结构体struct sockaddr在/usr/include/linux/socket.h中定义 struct sockaddr {unsigned short sa_fa ...

最新文章

  1. svn的安装以及post-commit实时更新网站
  2. 读书笔记-《增长黑客》-好产品是增长的根本
  3. mysql执行底层_天天写order by,你知道Mysql底层如何执行吗?
  4. Redis为什么是单线程还这么快?
  5. 对python编程做介绍-python002-编程语言介绍
  6. 最大乘积(记忆化搜索)
  7. openGauss索引详解
  8. 一次完整的数据分析实战!仅用4步,效率吊打Excel和Python
  9. Spring beans配置方案(二) 学习笔记
  10. Ubuntu下mysql修改字符集为utf8
  11. 计算机硬盘的常用分区工具,常用的几款分区合并工具推荐,合理使用电脑硬盘...
  12. linux搭建天地伟业easy7,天地伟业easy7客户端
  13. 中国30家值得信赖的大数据采集公司汇总!
  14. 分享下nirsoft提供的注册表工具
  15. codelite交叉编译动态库学习记录
  16. 学计算机轻松的表情包,轻松的表情包
  17. python中如何解决类互相调用问题_两个.py之间类的相互调用问题
  18. 【实习小tip】多层dialog弹窗遮罩问题、elementUI的form表单组件的select框在只读的情况下没办法拿到传来的数据、从弹窗子组件获取数据后需要刷新页面
  19. shell脚本一键安装jdk(三台)
  20. 新一轮调控将把中国房地产市场带向哪

热门文章

  1. [转] OpenCV 文字绘制cv::putText详解
  2. c语言调用system返回值,在C语言中获取用system函数调用shell的返回值
  3. ROS2——创建ROS2工作空间
  4. codeforces 1783 C. Yet Another Tournament
  5. 明日之后手游安卓版今日10点上线!来啊,一起来撸狗啊
  6. Au cs6怎样才能导入和导出m4a或者就是aac格式的文件呢?
  7. Word2016安装Mathtype后在选项卡显示
  8. 【Java】中int 和 Integer 与 new Integer() 的区别,int 可以使用 == 来对比两个变量是否相等,而 Integer 一定要使用 equals 来比较两个变量值是否相等
  9. pdf 文件格式及对象模型
  10. 掌财社寒山:恒指期货k线图口诀是什么?