sockaddr地址结构

bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
// 像bind这些函数API在很早的时候就有了
// 而struct sockaddr_in 是后面出现的, 针对IPV4
// IPv4即4个字节(32位)来表示IP,那么也就4亿多IP
// 所以后面出现了IPv6, 用128个位来表示IP地址

一、sockaddr数据结构

struct sockaddr: 很多网络编程函数诞生早于IPV4,那时候都使用的是sockaddr结构体,为了向前兼容,现在sockaddr退化成了(void*)的作用,传递一个地址给函数,至于这个函数是sockaddr_in或其他,则是由地址族确定的,然后函数内部再强制类型转换为所需的地址类型。

1. struct sockaddr与struct sockaddr_in

struct sockaddr {sa_family_t  sa_family; //选择地址家族,AF_xxx | 例如是IPV4的就是选择AF_INET | AF_INET6char         sa_data[14]; // 地址数据
}struct sockaddr_in {sa_family_t      sin_family; // 地址家族: AF_INETin_port_t        sin_port;   // 两字节的端口号(网络字节顺序)struct in_addr   sin_addr;   // 因特网地址
}// 因特网地址
struct in_addr {uint32_t         s_addr;     //32位的网络字节顺序的IP地址(32位的无符号整型数)// 而且这个整型数要转换成字符串// 再如,若客户端要去连接某个IP地址,要将字符串转换成整型数
}struct sockaddr_in server_addr;server_addr.sin_family = AF_INET; // 选择协议家族IPV4
// INADDR_ANY 宏定义 代表本地所有IP地址 0.0.0.0 整型数
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //因为这是网络字节顺序的IP地址,所以要用htonl转换一下server_addr.sin_port = htons(SERVER_PORT); // 网络字节顺序// 在调用bind的时候,因为bind要求传递的参数是struct sockaddr 结构体,所以要做强制转换
// 实际上struct sockaddr和struct sockaddr_in结构相似,都是16个字节
/* 在这里指定的是IPv4 ,所以bind会在绑定的时候根据地址家族AF_INET(IPV4的),会自动的把传递的&server_addr再强制转换成sockaddr_in,所以不会有问题,即使二者结构不一样(在内部还是用的sockaddr_in处理)*/
bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));

sockaddr地址结构——socket相关推荐

  1. socket网络编程——套接字地址结构

    声明:此博客是本人根据老师课件总结的,如有抄袭行为,本人会即刻删除. 1.主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同.大端字节序是指一个整数的 ...

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

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

  3. [Linux网络编程学习笔记]套接字地址结构

    好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...

  4. UNIX网络编程读书笔记:套接口地址结构

    前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...

  5. linux下c语言使用mac地址进行socket通信

    linux下c语言使用mac地址进行socket通信 server端: #include <unistd.h> #include <stdio.h> #include < ...

  6. 3.1.9 OS之二级页表的原理和地址结构

    文章目录 0.思维导图 1.为什么引入二级页表? 2.二级页表的原理和地址结构 3.如何实现二级页表的地址变换? 4.几个小细节 0.思维导图 1.为什么引入二级页表? 因为单级页表存在一些问题,所以 ...

  7. linux网络编程之一般应用采用的协议和不同套接字的地址结构以及用户进程和内核通过哪些函数传递套接字的地址结构

    1.一般应用采用的协议 2.不同套接字的地址结构 3.用户进程和内核通过哪些函数传递套接字的地址结构 从进程到内核传递套接字的地址结构函数有3个 bind.connect.sendto函数 从内核到进 ...

  8. Internet地址结构

    IP地址结构及分类寻址 IP地址 = <网络号> + <主机号>            ------------IPv4(32bit)点分四组表示法: 192.168.31.1 ...

  9. linux下ip地址转换整形,Linux中ip地址结构和ip地址的转换

    ip地址结构 struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port ...

最新文章

  1. python入门教程 pdf-Python快速入门PDF高清完整版本下载
  2. 用Itext把数据导出到Pdf文档
  3. python编程绘图库turtle如何安装_Python绘图库Turtle详细分析
  4. selenium的使用教程2
  5. 奇小葩讲设备树(2/5)-- Linux设备树详解(二)文件构成
  6. matlab 城市间最短路径
  7. springboot tomcat默认线程数_记一次JAVA线程池的错误用法
  8. struts2中文件上传
  9. 【资源】史上最全数据集汇总
  10. 总结:JavaEE完整体系架构
  11. PostgreSQL实际场景的十大缺陷你知道吗?
  12. 【华为云技术分享】Volcano火山:容器与批量计算的碰撞
  13. 组策略查看login记录_k8s实践记录(五)
  14. python 运算符优先级、Chaining comparison operators
  15. 【老生谈算法】matlab实现演化博弈算法源码——演化博弈
  16. 多空对比:一个实用的短中长期资金观察指标介绍
  17. hdu2825(AC 自动机)
  18. OpenCV视频篇——码流 / 码率 / 比特率 / 帧速率 / 分辨率
  19. html中row位置居中,rownumber
  20. 《黄帝内经》的理论体系

热门文章

  1. 二手市场三大顽疾背后:支付宝小程序能成闲鱼下一个流量跳板吗?
  2. 韩峰是个好干部,犀利哥其实很无奈,都放过他们吧
  3. iPhone双击背面打开粤康码
  4. 漫谈数据结构系列(二)之千里姻缘一“线”牵
  5. 如何选择适合自己的内存条
  6. FT232R USB UART驱动安装
  7. Hello Lark
  8. python爬快手个人介绍个性_快手主页介绍个性资料怎么写 快手主页介绍个性签名大全...
  9. python爬取B站关注列表
  10. golang 结构体struct、数组、结构体数组 定义与赋值 、json string转struct