### WinSock 学习笔记 #### 一、Socket 基础 **1.1 定义** 在 Windows 平台上,Socket 被定义为一种用于网络通信的 API,它提供了一种机制来实现不同计算机之间的数据交换。具体而言,Socket 是一个抽象层,允许程序员通过标准接口来编写网络应用程序。 ```c typedef unsigned int u_int; typedef u_int SOCKET; ``` 其中 `SOCKET` 类型是一个无符号整型变量,用来表示 Socket 的句柄。 **1.2 说明** Socket 可以被比喻成两个通信端点之间的插座,一旦建立了连接,双方就可以通过这个插座发送和接收数据。这种通信方式类似于文件读写操作,只不过这里的“文件”是指网络上的数据流。 **1.3 类型** Socket 主要有三种类型: **1.3.1 流式套接字 (Stream Socket)** 流式套接字提供了一种可靠的、面向连接的服务,数据传输过程中会确保数据的顺序性且不会丢失。流式套接字通常用于需要高可靠性的应用,比如 HTTP 和 FTP。 ```c #define SOCK_STREAM 1 ``` **1.3.2 数据报套接字 (Datagram Socket)** 数据报套接字提供了无连接的服务,即发送方和接收方之间无需先建立连接就可以直接发送数据。数据报套接字主要用于不需要高可靠性的场合,如 DNS 查询等。 ```c #define SOCK_DGRAM 2 ``` **1.3.3 原始套接字 (Raw Protocol Interface)** 原始套接字允许直接访问底层协议,可以用于实现自定义的网络协议或者进行网络数据包分析等。使用原始套接字时,程序员需要自己处理所有的网络细节,包括 IP 头部、TCP 或 UDP 头部等。 ```c #define SOCK_RAW 3 ``` **1.4 Socket 开发所需的文件** 为了使用 Socket 进行开发,需要包含以下文件: - **头文件**: `winsock2.h` - **库文件**: `ws2_32.lib` - **动态链接库**: `ws2_32.dll` #### 二、重要概念 **2.1 数据类型** 在 Socket 编程中,会用到以下几种基本的数据类型: ```c typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned long u_long; ``` 这些类型主要用于网络地址和端口等的定义。 **2.2 网络地址的数据结构** 网络地址主要用于指定数据包的目的地,通常由 IP 地址和端口号组成。 **2.2.1 旧网络地址结构** 旧的网络地址结构 `in_addr` 定义了一个 4 字节的联合体,其中包含了 IP 地址的不同表示形式: ```c struct in_addr { union { struct { u_char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct { u_short s_w1, s_w2; } S_un_w; u_long S_addr; } S_un; #define s_addr S_un.S_addr }; ``` **2.2.2 新网络地址结构** 新的网络地址结构简化了很多,只包含一个无符号长整数 `unsigned long` 来表示 IP 地址: ```c #define INADDR_LOOPBACK 0x7f000001 ``` 例如,本地回环地址 `127.0.0.1` 在新结构中表示为 `0x7f000001`。 **2.3 套接字地址结构** **2.3.1 sockaddr 结构** `sockaddr` 结构体用于存储 Socket 的地址信息,包括地址家族和具体的地址数据。 ```c struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* 14 bytes of protocol address */ }; ``` 其中 `sa_family` 字段指定了地址家族类型,常见的有 `AF_INET` 表示 IPv4 地址族,`AF_INET6` 表示 IPv6 地址族等。`sa_data` 字段用于存放具体的地址数据。 以上是关于 WinSock 学习笔记的基本内容,对于初学者来说,理解 Socket 的工作原理和基本数据结构是非常重要的。此外,熟悉不同类型的 Socket 及其适用场景也是必不可少的。希望这份学习笔记能帮助大家更好地掌握 Socket 编程的基础知识。
- 粉丝: 4
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助