.. | ||
include | ||
src | ||
CMakeLists.txt | ||
readme.md |
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接口,处理客户端连接的接受和数据交换。
一些易混淆的点
-
客户端创建的套接字包含指定
目标的IP地址和端口号
(TcpClientImpl类中的init函数),服务器创建的套接字只包含本机IP地址和监听端口
。 -
在网络编程中,
服务器
通常会在一个监听端口上等待来自客户端的连接请求。当服务器接受到一个连接请求时,它会创建一个新的套接字(或文件描述符)来表示这个新建立的连接(TcpClientAccept类实例),并且通常会为这个新的连接设置一系列的事件回调函数。 -
客户端实例(TcpClientImpl类对象)进行init操作时,会创建一个套接字并对目标服务器发出连接请求并启动事件循环(Loop函数),然后客户端实例会一直进行事件循环(监听是否有读写操作)直至连接关闭(Close函数)。
-
服务器
监听连接的套接字
和连接后新建立的套接字
要分别设置回调函数,这是两个东西,不要混淆。
该模块的实现过程
服务器端:
- 创建服务器端套接字:使用 hloop_create_tcp_server 函数创建一个新的 TCP 服务器端套接字,并指定要监听的 IP 地址和端口号。
- 设置回调函数:为服务器端套接字设置回调函数,包括:
on_accept:当有新的客户端尝试连接时调用。 on_close:当服务器端套接字关闭时调用。 - 启动事件循环:使用 hloop_run 启动服务器的事件循环,等待客户端的连接请求。
- 接受连接:在 on_accept 回调函数中,接受客户端的连接请求,并创建用于该连接的新套接字。
- 创建客户端接受对象:为新的客户端连接创建一个 TcpClientAcceptImpl 对象,并设置相应的回调函数。 on_close:当客户端连接关闭时调用。 on_recv:当客户端发送数据时调用。
- 管理客户端连接:将新创建的客户端接受对象添加到管理容器中,以便跟踪和管理。
客户端:
- 创建客户端套接字:使用 hio_create_socket 函数创建一个新的 TCP 客户端套接字。
- 设置回调函数:为客户端套接字设置回调函数,包括:
on_connect:当连接成功建立时调用。 on_close:当连接关闭时调用。 on_message:当接收到服务器发送的数据时调用。 - 连接到服务器:使用 hio_connect 函数向服务器发起连接请求。
- 启动事件循环:使用 hloop_run 启动客户端的事件循环,等待连接结果和数据传输。
- 处理连接结果:在 on_connect 回调函数中处理连接结果,如果连接成功,可以开始发送和接收数据。