sockaddr与sockaddr_in的区别
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的区别相关推荐
- linux sockaddr in,Linux C中sockaddr和sockaddr_in的区别
Linux C中sockaddr和sockaddr_in的区别 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 在各种系统调用或者函数中,只要 ...
- socket编程之sockaddr和sockaddr_in的区别
sockaddr和sockaddr_in的区别 sockaddr和sockaddr_in详解 1.struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址 ...
- linux下C语言套接字编程sockaddr和sockaddr_in的区别
tcp建立后,我想linux的服务端可以为每个连接的ip地址分配编号,方便进行每个客户端进行数据交互.所以我要知道每个连接的ip地址. struct sockaddr和struct sockaddr_ ...
- TCP/UDP中sockaddr和sockaddr_in的区别及用法
目录 一.先看两个结构体的定义 1.1 sockaddr 1.2 sockaddr_in 二.sockaddr与sockaddr_in的相同点和区别 2.1 相同点 2.2 区别 三.使用方法 3.1 ...
- sockaddr和sockaddr_in的区别
From: http://www.it165.net/pro/html/201211/4066.html 初学者很容易对二者有困惑的感觉,下面来讲一下二者的区别. sockaddr是在头文件 /usr ...
- linux网络编程之地址结构sockaddr和sockaddr_in的区别
1.介绍sockaddr 结构体struct sockaddr在/usr/include/linux/socket.h中定义 struct sockaddr {unsigned short sa_fa ...
- sockaddr、sockaddr_in、sockaddr_in6的区别及转换
本文转自:https://blog.csdn.net/albertsh/article/details/80991684 前言 最近在学习网络相关的知识,虽然之前代码写了不少,但是长时间不写难免会忘记 ...
- 结构体sockaddr、sockaddr_in、sockaddr_in6之间的区别和联系
本文转自https://blog.csdn.net/albertsh/article/details/80991684,简单易懂,赞. 前言 最近在学习网络相关的知识,虽然之前代码写了不少,但是长时间 ...
- socket 编程入门教程(一)TCP server端:3、sockaddr与sockaddr_in
2019独角兽企业重金招聘Python工程师标准>>> 收件人地址 一家化妆品公司将一批新产品的样品,准备发给某学校某个班的女生们免费试用.通常情况下,这件邮包的地址上可以这么写: ...
最新文章
- CSS综合征病例,医药-churg-strauss 综合征 (css) 变应性嗜酸性肉芽肿.ppt
- 磁盘上重复的贴图在内存中也会重复存在
- div置于页面底部_网易内部PPT模板有点丑,如何花最少的时间提高页面颜值?
- 为什么下拉框拉不下来_零线不带电,为什么还要拉一条?直接用地做零线不是更省钱?...
- jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】
- Python+django网页设计入门(13):表单、修改密码
- 字节跳动mysql面试题_刚面完的字节跳动java研发面试题整理(含答案):线程+MySQL+Spring+JVM...
- python中int什么意思_python中int是什么意思
- Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
- LeetCode之旋转数组
- sid更新 续订sas软件_更新SAS 9.4(64位) SID的方法
- 原生PHP调用科大讯飞语音合成(流式版)WebAPI
- 【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)
- iOS 图片捏合放大缩小 点击放大缩小
- c语言hypot函数,hypot()函数以及C ++中的示例
- ns3 学习资料和方法
- web一阶段 day14
- iOS Memory 内存详解
- 白鹭引擎用java_白鹭引擎产品工具更新 完善小游戏、QQ玩一玩开发支持
- 奥付云荣获2017年度企业级创新应用 Top 50
热门文章
- SpringMVC拦截器之拦截器接口方法演示
- mysql 光标的作用_Mysql那些事儿之(十四)光标的使用_MySQL
- 论云计算机下的中小企业会计信息化建设,中小企业云会计信息化的建议论文
- 用Windows Server实现软件定义存储之存储空间直连
- selenium webdirver之rdoc使用
- Web应用安全--攻防对抗发展趋势
- [LeetCode] Find Largest Value in Each Tree Row 找树每行最大的结点值
- ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决
- 监听列表ListVIew的滑动状态
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...