目录
一、什么是Socket
Socket(套接字)是一种用于网络通信的编程接口。它允许不同计算机之间通过网络进行数据交换和通信。
Socket 提供了一种标准的通信机制,使得应用程序可以通过网络发送和接收数据。它可以用于在客户端和服务器之间建立连接,进行双向的数据传输。
Socket 编程通常包括以下几个步骤:
- 创建 Socket:在应用程序中创建一个 Socket 实例,用于处理网络通信。
- 绑定地址和端口:将 Socket 绑定到一个特定的 IP 地址和端口上,以便其他计算机可以通过这个地址和端口与该 Socket 进行通信。
- 监听连接请求:对于服务器端,Socket 可以监听来自客户端的连接请求,并接受连接。
- 建立连接:对于客户端,Socket 可以尝试与服务器建立连接。
- 数据传输:一旦连接建立,Socket 可以进行数据的发送和接收。
Socket 可以使用不同的协议(如TCP、UDP等)进行数据传输,具体选择哪种协议取决于应用程序的需求。
总的来说,Socket 提供了一种方便的编程接口,使得应用程序可以通过网络进行数据交换和通信。它在互联网和局域网中广泛应用于各种网络应用程序的开发。
二、什么是C/S模式
C/S模式是Client/Server模式的缩写,指的是客户端-服务器模式。在C/S模式中,系统功能被划分为客户端和服务器两部分,客户端负责提供用户界面和与用户交互的功能,而服务器端则负责处理数据和业务逻辑。
服务端:
- 首先服务器先启动,并根据请求提供相应的服务:打开一个通信通道,在某一地址和端口上接收请求。等待客户请求到达该端口。
- 接收到重复服务请求,处理该请求并发送应答信号。返回第二步,等待另一客户请求。
- 关闭服务器。
客户端:
- 打开一个通信通道,并连接到服务器所在主机的特定端口。
- 向服务器发服务请求,等待并接收应答;继续提出请求。
- 请求结束后关闭通信通道并终止。
C/S模式的特点包括:
- 分工明确:客户端和服务器各自承担特定的功能,相对独立。
- 数据集中管理:服务器端负责数据的存储和管理,保证数据的一致性和安全性。
- 灵活性:客户端与服务器之间的通信采用标准的网络通信协议,可以跨平台、跨语言进行通信。
C/S模式广泛应用于各种网络应用程序的开发,如Web应用、数据库系统、邮件系统等。相对于其他模式,C/S模式能够提供更高的灵活性和可扩展性,使得系统的功能分布更加合理,有利于实现复杂的业务逻辑和数据处理。
三、面向连接与面向消息
面向连接的套接字:
- 传输过程中数据不会丢失
- 按顺序传输数据
- 传输的过程中不存在数据边界
面向消息的套接字:
- 强调快速传输而非顺序
- 传输的数据可能丢失也可能损毁
- 限制每次传输数据的大小
- 传输的数据有数据边界
数据边界:比如100个糖果分批传递,但是接收者需要凑集100个装袋
四、套接字类型
-
SOCK_STREAM:
- 对应于 TCP 协议,在套接字编程中使用该类型可以实现面向连接的、可靠的数据流传输。
- 适合于需要可靠性和顺序性的数据传输,如文件传输、网页浏览等。
- 使用 SOCK_STREAM 类型的套接字时,数据传输是面向连接的,数据是可靠的并且是按顺序传输的。
-
SOCK_DGRAM:
- 对应于 UDP 协议,在套接字编程中使用该类型可以实现无连接的、不可靠的数据报传输。
- 适合于对实时性要求较高、可以容忍少量数据丢失的场景,例如音频/视频流、在线游戏等。
- 使用 SOCK_DGRAM 类型的套接字时,每个数据包都是独立的,没有连接的概念,数据传输不保证可靠性和顺序性。
-
SOCK_RAW:
- 提供对网络层原始数据的访问,可以直接操作 IP 数据报,需要较高的权限,并且需要开发者自行处理协议头部等细节。
- 通常用于实现特定的网络功能或协议的自定义处理,例如实现 ICMP 报文处理、特定网络协议的实现等。
- 使用 SOCK_RAW 类型的套接字时,开发者需要自行处理协议相关的细节,包括构造和解析数据报等。
五、网络编程基本函数与基本数据结构
基本函数:
基本数据结构:
struct sockaddr {
u_short sa_family; //16 位地址类型 2 字节
char sa_data[14]; //14 字节地址数据:ip + port
};
struct sockaddr_in {
short sin_family; //16 位地址类型
u_short sin_port; //16 位端口号 65535 2 的16 次方struct in_addr sin_addr; //32 位 IP 地址 4 字节
char sin_zero[8]; //8 字节填充
};