mirror of
https://gitee.com/jiuyilian/embedded-framework.git
synced 2025-01-06 10:16:51 -05:00
59 lines
4.0 KiB
Markdown
59 lines
4.0 KiB
Markdown
# TCP模块
|
||
这个项目实现了一个用于网络通信的TCP模块,提供了服务器和客户端功能。
|
||
在网络编程中,套接字(socket)是一个用于网络通信的端点。在客户端和服务器模型中,客户端会创建一个套接字来与服务器建立连接,而服务器则监听来自客户端的连接请求。一旦连接建立,客户端和服务器就可以通过各自的套接字进行数据的发送和接收。
|
||
|
||
# 涉及的知识
|
||
* 网络通信
|
||
* 多线程处理
|
||
* 回调函数
|
||
* C++/C
|
||
* I/O多路复用
|
||
* 套接字编程
|
||
* TCP协议
|
||
* 事件循环
|
||
|
||
# 各文件的作用
|
||
* **TcpModule.h**:定义了TCP模块的公共接口和数据结构,包括服务器和客户端参数结构体、回调函数类型等。
|
||
|
||
* **TcpModule.cpp**:实现了TcpModule.h中定义的接口,包括创建和释放TCP服务器和客户端的函数。
|
||
|
||
* **ITcpClient.h/ITcpClient.cpp**:定义和实现了TCP客户端接口,包括初始化、读取数据、写入数据和关闭连接等虚函数。
|
||
|
||
* **ITcpServer.h/ITcpServer.cpp**:定义和实现了TCP服务器接口,包括初始化、关闭服务器等虚函数。
|
||
|
||
* **TcpClientImpl.h/TcpClientImpl.cpp**:实现了ITcpClient接口,是TCP客户端的具体实现。
|
||
|
||
* **TcpServerImpl.h/TcpServerImpl.cpp**:实现了ITcpServer接口,是TCP服务器的具体实现。
|
||
|
||
* **TcpModuleMakePtr.h/TcpModuleMakePtr.cpp**:提供了创建TCP服务器和客户端实例的工厂方法。
|
||
|
||
* **TcpServerHandle.h/TcpServerHandle.cpp**:管理TCP服务器的实例,提供了添加和获取服务器实例的方法。
|
||
|
||
* **TcpClientAcceptImpl.h/TcpClientAcceptImpl.cpp**:实现了ITcpClientAccept接口,处理客户端连接的接受和数据交换。
|
||
|
||
# 一些易混淆的点
|
||
1. 客户端创建的套接字包含指定`目标的IP地址和端口号`(TcpClientImpl类中的init函数),服务器创建的套接字只包含`本机IP地址和监听端口`。
|
||
|
||
2. 在网络编程中,服务器通常会在一个监听端口上等待来自客户端的连接请求。当服务器接受到一个连接请求时,它会创建一个新的套接字(或文件描述符)来表示这个新建立的连接,并且通常会为这个新的连接设置一系列的事件回调函数。
|
||
|
||
3. 客户端实例(TcpClientImpl类对象)进行init操作时,会创建一个套接字并对目标服务器发出连接请求并启动事件循环(Loop函数),然后客户端实例会一直进行事件循环(监听是否有读写操作)直至连接关闭(Close函数)。
|
||
|
||
# 该模块的实现过程
|
||
## 服务器端:
|
||
1. 创建服务器端套接字:使用 hloop_create_tcp_server 函数创建一个新的 TCP 服务器端套接字,并指定要监听的 IP 地址和端口号。
|
||
2. 设置回调函数:为服务器端套接字设置回调函数,包括:
|
||
on_accept:当有新的客户端尝试连接时调用。
|
||
on_close:当服务器端套接字关闭时调用。
|
||
3. 启动事件循环:使用 hloop_run 启动服务器的事件循环,等待客户端的连接请求。
|
||
4. 接受连接:在 on_accept 回调函数中,接受客户端的连接请求,并创建用于该连接的新套接字。
|
||
5. 创建客户端接受对象:为新的客户端连接创建一个 TcpClientAcceptImpl 对象,并设置相应的回调函数。
|
||
管理客户端连接:将新创建的客户端接受对象添加到管理容器中,以便跟踪和管理。
|
||
## 客户端:
|
||
1. 创建客户端套接字:使用 hio_create_socket 函数创建一个新的 TCP 客户端套接字。
|
||
2. 设置回调函数:为客户端套接字设置回调函数,包括:
|
||
on_connect:当连接成功建立时调用。
|
||
on_close:当连接关闭时调用。
|
||
on_message:当接收到服务器发送的数据时调用。
|
||
3. 连接到服务器:使用 hio_connect 函数向服务器发起连接请求。
|
||
4. 启动事件循环:使用 hloop_run 启动客户端的事件循环,等待连接结果和数据传输。
|
||
5. 处理连接结果:在 on_connect 回调函数中处理连接结果,如果连接成功,可以开始发送和接收数据。 |