sockaddr地址结构——socket
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相关推荐
- socket网络编程——套接字地址结构
声明:此博客是本人根据老师课件总结的,如有抄袭行为,本人会即刻删除. 1.主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同.大端字节序是指一个整数的 ...
- linux网络编程之地址结构sockaddr和sockaddr_in的区别
1.介绍sockaddr 结构体struct sockaddr在/usr/include/linux/socket.h中定义 struct sockaddr {unsigned short sa_fa ...
- [Linux网络编程学习笔记]套接字地址结构
好久没有看那Linux网络编程这本书了,今天看到了重点部分-TCP套接字.下面先来看看套接字的地址结构 Linux系统的套接字可以支持多种协议,每种不同的协议都是用不同的地址结构.在头文件<li ...
- UNIX网络编程读书笔记:套接口地址结构
前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...
- linux下c语言使用mac地址进行socket通信
linux下c语言使用mac地址进行socket通信 server端: #include <unistd.h> #include <stdio.h> #include < ...
- 3.1.9 OS之二级页表的原理和地址结构
文章目录 0.思维导图 1.为什么引入二级页表? 2.二级页表的原理和地址结构 3.如何实现二级页表的地址变换? 4.几个小细节 0.思维导图 1.为什么引入二级页表? 因为单级页表存在一些问题,所以 ...
- linux网络编程之一般应用采用的协议和不同套接字的地址结构以及用户进程和内核通过哪些函数传递套接字的地址结构
1.一般应用采用的协议 2.不同套接字的地址结构 3.用户进程和内核通过哪些函数传递套接字的地址结构 从进程到内核传递套接字的地址结构函数有3个 bind.connect.sendto函数 从内核到进 ...
- Internet地址结构
IP地址结构及分类寻址 IP地址 = <网络号> + <主机号> ------------IPv4(32bit)点分四组表示法: 192.168.31.1 ...
- linux下ip地址转换整形,Linux中ip地址结构和ip地址的转换
ip地址结构 struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port ...
最新文章
- osg画线_osg 基本几何图元
- windows常用命令netstat
- 『Linux基础 - 4 』linux常用命令(1)
- 【Linux系统编程学习】 GDB调试器的简单使用
- python os库使用
- 【项目调研+论文阅读】(目录)中文实体识别研究方法综述 day6
- 24-java版Spark程序读取ElasticSearch数据
- 1.nodejs介绍
- HDU1582 AC Again【DFS】
- paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例
- Excel VBA(Visual Basic)编程入门
- Modbus_TCP 报文格式解析
- python info函数的使用方法_Python 函数
- 软件项目管理第二章笔记---软件项目整体管理
- msm 8953 camera 流程
- 《孙子兵法》的优秀读后感作文2100字
- 朴素贝叶斯——凉鞋问题
- 【建议背诵】2022下半年软考「集成」100题(1)
- 【文件IO】Linux 文件操作(一) —— 遍历指定目录下的所有文件
- html5源码笔记(三)【爱创课堂专业前端培训】