文章接前面的例子程序。首先介绍套接口地址结构:
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个函数则是将字节序变成网络字节序。
分享到:
相关推荐
对于不同的协议族,套接口地址结构也会有所不同。例如,在IPv4中,`sockaddr_in`结构体被用来定义地址: ```c struct sockaddr_in { sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* TCP/UDP端口...
结构规范则涉及到M.2卡的物理尺寸和接口引脚的布局,以保证卡能够适配不同的插座类型。规范中会明确各种尺寸和类型的M.2卡,比如Type 2230、Type 2242、Type 3030和Type 3042等。这些类型通过不同长度和宽度的组合来...
### UNIX网络编程(第2版)第1卷_套接口API和XOpen传输接口API6 #### 套接口API(Socket API) 在《UNIX网络编程》第二版第一卷中,作者深入探讨了套接口API(Socket API)的核心概念与实践应用。套接口API是一种在...
下面将详细阐述套接口的基本概念、类型、API、以及地址结构。 首先,套接口是网络编程的基石,它提供了连接不同进程间通信的桥梁,无论这些进程是在同一台机器上还是在网络的不同节点上。有两种主要的网络编程方式...
在Linux中,套接口地址结构定义为`struct sockaddr`,包含地址类型(如AF_INET表示IPv4)和数据字段,用于存储具体协议地址。对于TCP/IP,我们使用`struct sockaddr_in`,它包含端口号(`sin_port`)和IP地址(`sin_...
PCI Express(PCIe)M.2规范V1.1是一个重要的技术文档,它详细阐述了M.2接口的标准,这是现代计算机系统中广泛使用的高速接口,尤其在存储设备如固态硬盘(SSD)上应用广泛。M.2接口基于PCI Express总线,提供了比...
【推选】套接口概念PPT资料详细解读 ...理解套接口的概念、类型和相关数据结构对于进行有效的网络编程至关重要。在实际应用中,开发者需要根据具体需求选择合适的套接口类型,并正确使用相应的系统调用进行通信。
4. **数据模型**:说明OPC DA的数据结构,如项(Items)、组(Groups)和服务器(Servers)的概念,以及它们之间的关系。 5. **事件模型**:描述OPC DA的事件通知机制,如数据更改、连接状态变化等事件的处理方式。 ...
套接口的创建需要指定一个域(也称为地址族),如AF_INET表示IPv4地址族,还有AF_UNIX用于本地进程通信。在AF_INET域下,数据结构`sockaddr_in`用来存储Internet地址和端口号信息。`socket()`函数用于创建套接口,...
### Linux内核2.4.x网络接口源码结构解析 #### 一、引言 Linux内核中的网络接口实现部分是十分重要的组成部分之一,对于理解网络协议和提高网络编程技能有着不可替代的作用。本文将围绕Linux 2.4.x版本内核的网络...
2. 蓝牙低耗能结构 3. 空中接口框架结构 4. GATT和GAP 5. 自定义配置文件–例如‘HelloBluetooth’ 源代码–将‘HelloBluetooth’应用于: 1. TICC2540 2. NordicnRF8001 3. iOS 4. Android 5. Windows8自定义配置...
2. **URL**:接口的调用地址。 3. **方法**:HTTP请求方法,如GET、POST等。 4. **参数**:包括参数名称、类型、描述、是否必填等。 5. **请求示例**:展示一个完整的请求实例,便于测试和理解。 6. **响应示例**:...
3. **套接口地址结构**:在UNIX系统中,套接口地址由`sockaddr`结构体表示,不同的协议族(如AF_INET用于IPv4,AF_INET6用于IPv6)有各自的子结构体,如`sockaddr_in`和`sockaddr_in6`。 4. **套接口创建与绑定**:...
在“一种接口衬套以及其与复合管的连接结构.pdf”文档中,很可能详细介绍了这种特定的接口衬套设计,包括其结构特点、工作原理、安装方法、性能优势以及可能的应用场景。通过阅读这份文档,可以深入了解该技术的创新...
套接口命令需要在 Linux 内核中定义,以便实现蓝牙协议的套接口命令。 6. Linux 蓝牙协议实现的目标 我们的目标是完成基于嵌入式 Linux 的蓝牙协议实现。为了实现这个目标,我们需要详细分析蓝牙协议在 Linux 中的...
也可以应用三层结构,但采用这种结构应用程序访问效率很底,难以满足需要高效率的需求。要实现高效的数据库访问,一些比较通用的方法难以满足需求,开发人员不得不去学不同的数据库的特定的访问接口,如ORACLE/OCI,...
"电信设备-控制台用信息接口结构.zip"是一个包含详细信息的压缩文件,主要关注的是控制台与设备之间的信息接口结构。控制台是管理和监控电信网络的核心组件,而信息接口结构则是保证控制台能够有效控制和监测设备的...
IPolyline接口代表了多线段的几何结构,它可以用来模拟道路、河流等线状地理特征。开发者可以通过该接口创建复杂的线状要素。 8. IGeometry接口 IGeometry接口是所有几何对象的基接口,包括点、线、面等。它提供了...
Verilog编程是PS2键盘接口设计的实现语言,用于描述数字电路的行为和结构。通过Verilog编程,可以实现PS2键盘接口的设计和实现。 7. FPGA实现 FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,能够实现...