struct sockaddr {unsigned short sa_family; char sa_data[14];
};

此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。

但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构
sockaddr_in(在netinet/in.h中定义):

struct sockaddr_in {short int sin_family; unsigned short int sin_port; struct in_addr sin_addr;unsigned char sin_zero[8];
};
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

想来你是要进行网络编程,使用socket, listen, bind等函数。
你只要记住,填值的时候使用sockaddr_in结构,而作为函数的参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符长。

常用转化IP地址的两个函数:

unsigned long inet_addr( const char FAR *cp ); //将“192.168.0.1”类似字符串转化为in_addr结构体

char FAR * inet_ntoa( struct in_addr in );//将in_addr结构体转化为“192.168.0.1”类似字符串

sockaddr与sockaddr_in的区别相关推荐

  1. linux sockaddr in,Linux C中sockaddr和sockaddr_in的区别

    Linux C中sockaddr和sockaddr_in的区别 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 在各种系统调用或者函数中,只要 ...

  2. socket编程之sockaddr和sockaddr_in的区别

    sockaddr和sockaddr_in的区别 sockaddr和sockaddr_in详解 1.struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址 ...

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

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

  4. TCP/UDP中sockaddr和sockaddr_in的区别及用法

    目录 一.先看两个结构体的定义 1.1 sockaddr 1.2 sockaddr_in 二.sockaddr与sockaddr_in的相同点和区别 2.1 相同点 2.2 区别 三.使用方法 3.1 ...

  5. sockaddr和sockaddr_in的区别

    From: http://www.it165.net/pro/html/201211/4066.html 初学者很容易对二者有困惑的感觉,下面来讲一下二者的区别. sockaddr是在头文件 /usr ...

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

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

  7. sockaddr、sockaddr_in、sockaddr_in6的区别及转换

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

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

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

  9. socket 编程入门教程(一)TCP server端:3、sockaddr与sockaddr_in

    2019独角兽企业重金招聘Python工程师标准>>> 收件人地址 一家化妆品公司将一批新产品的样品,准备发给某学校某个班的女生们免费试用.通常情况下,这件邮包的地址上可以这么写: ...

最新文章

  1. CSS综合征病例,医药-churg-strauss 综合征 (css) 变应性嗜酸性肉芽肿.ppt
  2. 磁盘上重复的贴图在内存中也会重复存在
  3. div置于页面底部_网易内部PPT模板有点丑,如何花最少的时间提高页面颜值?
  4. 为什么下拉框拉不下来_零线不带电,为什么还要拉一条?直接用地做零线不是更省钱?...
  5. jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】
  6. Python+django网页设计入门(13):表单、修改密码
  7. 字节跳动mysql面试题_刚面完的字节跳动java研发面试题整理(含答案):线程+MySQL+Spring+JVM...
  8. python中int什么意思_python中int是什么意思
  9. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
  10. LeetCode之旋转数组
  11. sid更新 续订sas软件_更新SAS 9.4(64位) SID的方法
  12. 原生PHP调用科大讯飞语音合成(流式版)WebAPI
  13. 【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)
  14. iOS 图片捏合放大缩小 点击放大缩小
  15. c语言hypot函数,hypot()函数以及C ++中的示例
  16. ns3 学习资料和方法
  17. web一阶段 day14
  18. iOS Memory 内存详解
  19. 白鹭引擎用java_白鹭引擎产品工具更新 完善小游戏、QQ玩一玩开发支持
  20. 奥付云荣获2017年度企业级创新应用 Top 50

热门文章

  1. SpringMVC拦截器之拦截器接口方法演示
  2. mysql 光标的作用_Mysql那些事儿之(十四)光标的使用_MySQL
  3. 论云计算机下的中小企业会计信息化建设,中小企业云会计信息化的建议论文
  4. 用Windows Server实现软件定义存储之存储空间直连
  5. selenium webdirver之rdoc使用
  6. Web应用安全--攻防对抗发展趋势
  7. [LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值
  8. ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决
  9. 监听列表ListVIew的滑动状态
  10. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...