C++后端开发--网络编程基础

目录

一、网络编程基础概念

1.1 网络协议

1.2 IP地址和端口号

1.3 Socket

1.4 TCP协议的三次握手和四次挥手

TCP的三次握手

TCP的四次挥手

整个流程更通俗易懂

TCP 三次握手流程图

TCP 四次挥手流程图

1.5 详细介绍一下http协议

HTTP协议的主要特点

HTTP请求

HTTP请求方法

HTTP响应

常见的HTTP状态码

HTTP/1.1 vs HTTP/2 vs HTTP/3

HTTP/1.1

HTTP/2

HTTP/3

HTTP安全

二、Socket编程

2.1 创建Socket

2.2 绑定地址和端口

2.3 监听和接受连接

2.4 发送和接收数据

2.5 关闭Socket

三、简单的服务器示例

四、结语

五、深入探讨 select 和 epoll,以及多客户端编程

5.1 select 的工作原理及使用

5.1.1 select 基本概念

5.1.2 select 函数原型

5.1.3 使用 select 的步骤

5.1.4 select 示例

5.2 epoll 的工作原理及使用

5.2.1 epoll 基本概念

5.2.2 epoll 函数

5.2.3 使用 epoll 的步骤

5.2.4 epoll 示例

5.3、select 和 epoll 的比较

5.3.1 select 的优缺点

5.3.2 epoll 的优缺点

5.4、结语


网络编程是后端开发中不可或缺的一部分,尤其是在构建需要与其他系统或设备通信的应用程序时。本文将从基础概念开始,逐步深入网络编程的各个方面,帮助读者建立全面的网络编程知识体系。

一、网络编程基础概念

1.1 网络协议

网络协议是计算机网络中进行数据交换的规则。常见的网络协议包括:

  • TCP/IP:传输控制协议/互联网协议,是互联网的核心协议。TCP提供可靠的、面向连接的通信,而IP负责数据包的路由和传输。
  • UDP:用户数据报协议,是一种无连接的协议,适用于实时应用,如视频流和在线游戏。
  • HTTP/HTTPS:超文本传输协议/安全超文本传输协议,用于浏览器和服务器之间的通信。
  • FTP:文件传输协议,用于文件的上传和下载。

1.2 IP地址和端口号

  • IP地址:标识网络中的每个设备,如192.168.1.1
  • 端口号:用于区分同一设备上的不同服务,范围为065535

1.3 Socket

Socket是网络编程的基石,提供了应用层与TCP/IP协议栈通信的接口。主要类型有:

  • 流式套接字(Stream Socket):基于TCP,提供可靠的数据传输。
  • 数据报套接字(Datagram Socket):基于UDP,适用于无连接的数据传输。

1.4 TCP协议的三次握手和四次挥手

TCP的三次握手

三次握手(Three-way Handshake)是TCP建立连接的过程,确保双方能够正确接收和发送数据。三次握手的步骤如下:

  1. 第一次握手(SYN)

    • 客户端向服务器发送一个SYN(Synchronize)报文,表示请求建立连接。
    • 报文头中的SYN标志位被置为1,同时生成一个初始序列号(Sequence Number),假设为x。
    客户端 -> 服务器:SYN=1, Seq=x
  2. 第二次握手(SYN-ACK)

    • 服务器收到客户端的SYN报文后,确认连接请求,并向客户端发送一个SYN-ACK(Synchronize-Acknowledgment)报文。
    • 报文头中的SYN和ACK标志位都被置为1,ACK号为x+1(确认已收到客户端的SYN),并生成一个自己的初始序列号(假设为y)。
    服务器 -> 客户端:SYN=1, ACK=1, Seq=y, Ack=x+1
  3. 第三次握手(ACK)

    • 客户端收到服务器的SYN-ACK报文后,向服务器发送一个ACK(Acknowledgment)报文,表示确认连接建立。
    • 报文头中的ACK标志位被置为1,ACK号为y+1(确认已收到服务器的SYN),序列号为x+1。
    客户端 -> 服务器:ACK=1, Seq=x+1, Ack=y+1

完成三次握手后,客户端和服务器之间的TCP连接正式建立,可以开始数据传输。

TCP的四次挥手

四次挥手(Four-way Handshake)是TCP断开连接的过程,确保双方都能正常关闭连接。四次挥手的步骤如下:

  1. 第一次挥手(FIN)

    • 一方(通常是客户端)向另一方发送一个FIN(Finish)报文,表示希望关闭连接。
    • 报文头中的FIN标志位被置为1,序列号为u。
    客户端 -> 服务器:FIN=1, Seq=u
  2. 第二次挥手(ACK)

    • 另一方(通常是服务器)收到FIN报文后,向发送方发送一个ACK报文,确认已经收到关闭连接的请求。
    • 报文头中的ACK标志位被置为1,ACK号为u+1。
    服务器 -> 客户端:ACK=1, Seq=v, Ack=u+1
  3. 第三次挥手(FIN)

    • 服务器也向客户端发送一个FIN报文,表示同意关闭连接。
    • 报文头中的FIN标志位被置为1,序列号为w。
    服务器 -> 客户端:FIN=1, Seq=w
  4. 第四次挥手(ACK)

    • 客户端收到服务器的FIN报文后,向服务器发送一个ACK报文,确认已经收到关闭连接的请求。
    • 报文头中的ACK标志位被置为1,ACK号为w+1。
    客户端 -> 服务器:ACK=1, Seq=u+1, Ack=w+1

完成四次挥手后,客户端和服务器之间的TCP连接正式关闭。

通过三次握手和四次挥手机制,TCP协议能够确保可靠地建立和关闭连接,使得数据传输变得可靠和有序。这是网络编程中非常重要的部分,理解和掌握这些概念对于实现高效和稳定的网络通信至关重要。

整个流程更通俗易懂
TCP 三次握手流程图
客户端                              服务器
  |                                    |
  | --------- SYN, Seq=x ------------> |
  |                                    |
  | <------ SYN, ACK, Seq=y, Ack=x+1 --|
  |                                    |
  | --------- ACK, Seq=x+1, Ack=y+1 -->|
  |                                    |
  • 解释:
  1. 第一次握手:客户端发送SYN

    • 客户端向服务器发送一个SYN(同步)包,表明客户端想要建立连接,并且包含一个初始序列号(Seq=x)。
  2. 第二次握手:服务器回应SYN-ACK

    • 服务器收到SYN包后,回应一个SYN-ACK包,表示同意连接。这个包包含服务器的初始序列号(Seq=y)和对客户端SYN包的确认(Ack=x+1)。
  3. 第三次握手:客户端发送ACK

    • 客户端收到SYN-ACK包后,回应一个ACK包,确认服务器的SYN包(Ack=y+1),此时连接建立,双方可以开始传输数据。
TCP 四次挥手流程图
客户端                              服务器
  |                                    |
  | --------- FIN, Seq=u ------------> |
  |                                    |
  | <--------- ACK, Seq=v, Ack=u+1 ----|
  |                                    |
  | <--------- FIN, Seq=w ------------ |
  |                                    |
  | --------- ACK, Seq=u+1, Ack=w+1 -->|
  |                                    |
  • 解释:
  1. 第一次挥手:客户端发送FIN

    • 客户端发送一个FIN(终止)包,表示客户端要关闭连接,并且包含当前序列号(Seq=u)。
  2. 第二次挥手:服务器回应ACK

    • 服务器收到FIN包后,回应一个ACK包,确认客户端的FIN包(Ack=u+1),此时客户端到服务器的连接关闭,但服务器到客户端的连接仍然存在。
  3. 第三次挥手:服务器发送FIN

    • 服务器也发送一个FIN包,表示服务器也要关闭连接,并且包含当前序列号(Seq=w)。
  4. 第四次挥手:客户端回应ACK

    • 客户端收到服务器的FIN包后,回应一个ACK包,确认服务器的FIN包(Ack=w+1),此时整个连接正式关闭。

这些流程图展示了TCP协议在建立和关闭连接时的具体步骤,帮助理解TCP三次握手和四次挥手的机制。这样,你可以更直观地看到每一步是如何进行的,以及每一步的作用。

1.5 详细介绍一下http协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于分布式、协作和超媒体信息系统的应用层协议,是万维网数据通信的基础。HTTP起初由蒂姆·伯纳斯-李(Tim Berners-Lee)为万维网设计,现由互联网工程任务组(IETF)和万维网联盟ÿ

在DevC++中编写和开发后端C语言程序的基本步骤如下: 1. 下载和安装DevC++: 首先,从官网或可信的下载源下载最新版本的DevC++。安装过程很简单,按照提示一步步操作即可完成安装。 2. 创建新项目: 打开DevC++,点击"文件" > "新建" > "源代码文件",或者使用快捷键Ctrl+N来创建一个新的C语言源文件。 3. 编写代码: 在打开的编辑器窗口中开始编写你的C语言代码。例如,一个简单的"Hello, World!"程序可能如下: ```c #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } ``` 4. 保存文件: 点击"文件" > "保存",或者使用快捷键Ctrl+S来保存你的文件。确保文件扩展名为.c,例如"backend.c"。 5. 编译和运行: 点击工具栏上的"编译并运行"按钮(通常是一个带有齿轮和播放图标的按钮),或者使用快捷键F11。DevC++会先编译代码,如果编译成功,会自动运行生成的可执行文件。 6. 调试: 如果你的程序出现问题,可以使用DevC++提供的调试工具。点击"调试"菜单,可以看到单步执行、设置断点、查看变量值等功能。 7. 后端开发注意事项: - 考虑使用多文件项目,将不同的功能模块分开到不同的.c和.h文件中。 - 注意内存管理,确保释放不再使用的内存,避免内存泄漏。 - 使用版本控制系统(如Git)来管理你的代码。 - 对于大型项目,考虑使用makefile来管理编译过程。 8. 测试: 为你的后端功能编写测试用例,确保每个功能模块都能正常工作。 9. 部署: 当你的程序开发完成并经过充分测试后,你可以将其部署到目标服务器上。确保目标环境有运行C程序所需的所有库和依赖。 10. 维护和更新: 根据需求变化和bug报告,持续更新和维护你的后端程序。 记住,后端开发不仅仅是编写代码,还包括设计系统架构、处理安全问题、优化性能等。在DevC++开发后端C程序时,要特别注意这些方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

telllong

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值