`
memorymyann
  • 浏览: 270818 次
  • 性别: 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个函数则是将字节序变成网络字节序。

分享到:
评论

相关推荐

    UNIX网络编程(第2版)第1卷_套接口API和XOpen.传输接口API3

    对于不同的协议族,套接口地址结构也会有所不同。例如,在IPv4中,`sockaddr_in`结构体被用来定义地址: ```c struct sockaddr_in { sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* TCP/UDP端口...

    PCIE M.2 规范V1.0

    结构规范则涉及到M.2卡的物理尺寸和接口引脚的布局,以保证卡能够适配不同的插座类型。规范中会明确各种尺寸和类型的M.2卡,比如Type 2230、Type 2242、Type 3030和Type 3042等。这些类型通过不同长度和宽度的组合来...

    UNIX网络编程(第2版)第1卷_套接口API和XOpen.传输接口API6

    ### UNIX网络编程(第2版)第1卷_套接口API和XOpen传输接口API6 #### 套接口API(Socket API) 在《UNIX网络编程》第二版第一卷中,作者深入探讨了套接口API(Socket API)的核心概念与实践应用。套接口API是一种在...

    第二讲 套接口基础.ppt

    下面将详细阐述套接口的基本概念、类型、API、以及地址结构。 首先,套接口是网络编程的基石,它提供了连接不同进程间通信的桥梁,无论这些进程是在同一台机器上还是在网络的不同节点上。有两种主要的网络编程方式...

    Linux下套接口技术编写网络域名解析程序.pdf

    在Linux中,套接口地址结构定义为`struct sockaddr`,包含地址类型(如AF_INET表示IPv4)和数据字段,用于存储具体协议地址。对于TCP/IP,我们使用`struct sockaddr_in`,它包含端口号(`sin_port`)和IP地址(`sin_...

    PCI Express M.2 Specification V1.1.zip

    PCI Express(PCIe)M.2规范V1.1是一个重要的技术文档,它详细阐述了M.2接口的标准,这是现代计算机系统中广泛使用的高速接口,尤其在存储设备如固态硬盘(SSD)上应用广泛。M.2接口基于PCI Express总线,提供了比...

    推选套接口概念PPT资料.ppt

    【推选】套接口概念PPT资料详细解读 ...理解套接口的概念、类型和相关数据结构对于进行有效的网络编程至关重要。在实际应用中,开发者需要根据具体需求选择合适的套接口类型,并正确使用相应的系统调用进行通信。

    OPCDAAuto.dll 接口文档

    4. **数据模型**:说明OPC DA的数据结构,如项(Items)、组(Groups)和服务器(Servers)的概念,以及它们之间的关系。 5. **事件模型**:描述OPC DA的事件通知机制,如数据更改、连接状态变化等事件的处理方式。 ...

    套接口概念(共29张PPT)精选.pptx

    套接口的创建需要指定一个域(也称为地址族),如AF_INET表示IPv4地址族,还有AF_UNIX用于本地进程通信。在AF_INET域下,数据结构`sockaddr_in`用来存储Internet地址和端口号信息。`socket()`函数用于创建套接口,...

    Linux内核2.4.x的网络接口源码的结构

    ### Linux内核2.4.x网络接口源码结构解析 #### 一、引言 Linux内核中的网络接口实现部分是十分重要的组成部分之一,对于理解网络协议和提高网络编程技能有着不可替代的作用。本文将围绕Linux 2.4.x版本内核的网络...

    Bluetooth快速入门套件

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

    接口需求文档模板.rar

    2. **URL**:接口的调用地址。 3. **方法**:HTTP请求方法,如GET、POST等。 4. **参数**:包括参数名称、类型、描述、是否必填等。 5. **请求示例**:展示一个完整的请求实例,便于测试和理解。 6. **响应示例**:...

    UNIX 网络编程 第1卷套接口API 程序源代码

    3. **套接口地址结构**:在UNIX系统中,套接口地址由`sockaddr`结构体表示,不同的协议族(如AF_INET用于IPv4,AF_INET6用于IPv6)有各自的子结构体,如`sockaddr_in`和`sockaddr_in6`。 4. **套接口创建与绑定**:...

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

    在“一种接口衬套以及其与复合管的连接结构.pdf”文档中,很可能详细介绍了这种特定的接口衬套设计,包括其结构特点、工作原理、安装方法、性能优势以及可能的应用场景。通过阅读这份文档,可以深入了解该技术的创新...

    基于Linux蓝牙协议实现的设计接口.pdf

    套接口命令需要在 Linux 内核中定义,以便实现蓝牙协议的套接口命令。 6. Linux 蓝牙协议实现的目标 我们的目标是完成基于嵌入式 Linux 的蓝牙协议实现。为了实现这个目标,我们需要详细分析蓝牙协议在 Linux 中的...

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

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

    电信设备-控制台用信息接口结构.zip

    "电信设备-控制台用信息接口结构.zip"是一个包含详细信息的压缩文件,主要关注的是控制台与设备之间的信息接口结构。控制台是管理和监控电信网络的核心组件,而信息接口结构则是保证控制台能够有效控制和监测设备的...

    ArcGIS接口详细说明-开发心得

    IPolyline接口代表了多线段的几何结构,它可以用来模拟道路、河流等线状地理特征。开发者可以通过该接口创建复杂的线状要素。 8. IGeometry接口 IGeometry接口是所有几何对象的基接口,包括点、线、面等。它提供了...

    基于FPGA的PS2接口编程

    Verilog编程是PS2键盘接口设计的实现语言,用于描述数字电路的行为和结构。通过Verilog编程,可以实现PS2键盘接口的设计和实现。 7. FPGA实现 FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,能够实现...

Global site tag (gtag.js) - Google Analytics