`
memorymyann
  • 浏览: 266045 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

2.套接口地址结构

阅读更多

文章接前面的例子程序。首先介绍套接口地址结构:

struct sockaddr_in,定义在netinet/in.h中,一般是在/usr/include 下

 

struct in_addr {

   in_addr_t s_addr;/*32字节的ipv4地址*/

}

 

struct sockaddr_in {

   uint8_t sin_len;

   sa_family_y sin_family;

   in_port_t sin_port;

 

   struct in_addr sin_addr;

   char sin_zero[8];

}

 

 

POSIX.1g只需要3个成员sin_family,sin_addr,sin_port。定义额外成员可以接受,所以可以理解sin_zero是个缓冲,所有套接口大小都是16字节。

sin_len表示长度成员(因为后面有个sin_zero扩展位,虽然没有使用,我是这么猜的)。

sin_family表示地址族成员。

明显了sin_addr是32位IP地址。

   所以前面的程序中inet_pton(AF_INET, argv[1], &servaddr.sin_addr)将参数1放入地址

sin_port则是无符号的16位,既是端口号。

   servaddr.sin_port = htons(atoi(argv[2]));既为放入端口号。

 

sin_zero成员暂不适用,一般置成0,但是一般我们在初始化时候将整个数据结构置成0,既bzero(&servaddr, sizeof(servaddr));

 

结构仅给定主机上使用,虽然成员在不同主机间通信,但结构本身不参与通信。

 

 

通用套接口地址结构

   前面问题是IPV4的套接口,但在传递函数直接时候,必须使用通用套接口,原本ANSIC可以使用void *来解决,但是套接口是在ANSIC之前定义,因此出现了通用套接口

 

struct sock_addr {

   uint8_t sa_len;

   sa_family_t sa_family;

   char sa_data[14];

}

这就是为什么在bind(listenfd, (struct socket_addr *)&servaddr, sizeof(servaddr));要强制转换。

 

IPV6套接口地址结构就省略了。

 

关于htons和htonl函数,字节排序函数,主机排序可能有2种,一种是小段字节序:低序字节存储在起始位置,相反则是大端字节序。网络协议中有网络字节序,这2个函数则是将字节序变成网络字节序。

分享到:
评论

相关推荐

    linux网路编程 中文 23M 版

    1.5.2 Linux的文件结构................................................ 9 1.6 G N U 通用公共许可证..................................................10 1.6.1 G P L许可证的历史...............................

    Bluetooth快速入门套件

    2. 蓝牙低耗能结构 3. 空中接口框架结构 4. GATT和GAP 5. 自定义配置文件–例如‘HelloBluetooth’ 源代码–将‘HelloBluetooth’应用于: 1. TICC2540 2. NordicnRF8001 3. iOS 4. Android 5. Windows8自定义配置...

    通用数据库接口(ORACLE,DB2...)

    也可以应用三层结构,但采用这种结构应用程序访问效率很底,难以满足需要高效率的需求。要实现高效的数据库访问,一些比较通用的方法难以满足需求,开发人员不得不去学不同的数据库的特定的访问接口,如ORACLE/OCI,...

    Windows网络编程

    1795.1.1 局域网简史 1795.1.2 局域网特点 1805.1.3 局域网组成 1805.2 网络接口卡与硬件编址 1805.2.1 网卡基本结构 1805.2.2 网卡参数 1815.2.3 硬件编址与包过滤 1825.2.4 硬件编址方式 1835.2.5 广播与...

    VxWorks操作系统指南

    1. VxWorks操作系统概述 1.1.VxWorks 操作系统简介 ...1.5.1. 套接口(Sockets) 1.6.中断服务程序 1.7.时间管理器 2.VxWorks应用指导 2.1.系统启动 2.1.1. 启动盘的制作 2.1.1. 主机Tornado环境配置

    EAS-开发宝典

    2、EAS-BOS 代码体系结构..............................................................................................................3 1、代码目录结构.....................................................

    周立功ARM培训精华(全套)

    2. 嵌入式处理器 3. 嵌入式操作系统 第二章 嵌入式系统工程设计 1. 嵌入式系统项目开发生命周期 2. 嵌入式系统工程设计方法简介 第三章 ARM7体系结构 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接...

    Windows网络编程(PDF).rar

    935.2.2 Windows CE网络协议 945.3 Winsock 2协议信息 945.4 Windows套接字 975.5 具体平台的问题 995.6 选择适当的协议 1005.7 小结 100第6章 地址家族和名字解析 1026.1 IP 1026.1.1 TCP 1026.1.2 UDP 1026.1.3 定...

    《Windows网络编程技术》.rar

    地址家族和名字解析1026.1 IP1026.1.1 TCP1026.1.2 UDP1026.1.3 定址1026.1.4 创建套接字1056.1.5 名字解析1056.2 红外线套接字1076.2.1 定址1076.2.2 名字解析1086.2.3 红外线设备列举1086.2.4 查询IAS1106.2.5 ...

    Eclipse中文教程.pdf

    3、含文档结构目录,可以方便的跳转到对应章节 4、允许对文档注释和查找 目录 0.环境说明.......................................................................................................................

    行业分类-设备装置-一种接口衬套以及其与复合管的连接结构.zip

    行业分类-设备装置-一种接口衬套以及其与复合管的连接结构.zip

    单片机人机接口设计.doc

    人机接口设计 2 4.1 实验设计流程 2 4.2 实验原理图 3 4.3 实验源代码 3 5 结果分析 5 6 实验总结 6 7、参考文献 6 单片机人机接口设计 1.课程设计目的 (1)对大学所学课程进行汇总。 (2)通过设计单片机来实现人机...

    Solaris 动态跟踪指南

    DTrace提供一个强大的基础结构,使管理员、开发者和服务人员能简明地回答有关操作系统和用户程序行为的任意问题。《Solaris动态跟踪指南》介绍如何使用DTrace观察、调试和调优系统行为。本书还包含一套完整的关于...

Global site tag (gtag.js) - Google Analytics