NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
tcp_client_base类 参考abstract

TCP客户端基类 更多...

#include <tcp_client.hpp>

类 tcp_client_base 继承关系图:
[图例]

Public 类型

using exception_handler_t = function<void(const exception&)>
 异常处理器类型
using connect_callback_t = function<void(const string&, ports)>
 连接回调类型
using disconnect_callback_t = function<void()>
 断开回调类型

Public 成员函数

 tcp_client_base ()=default
 默认构造函数
 tcp_client_base (dns_client dns)
 构造函数(带DNS客户端)
virtual ~tcp_client_base ()
 析构函数
void set_connect_timeout (milliseconds timeout)
 设置连接超时时间
NEFORCE_NODISCARD milliseconds connect_timeout () const noexcept
 获取连接超时时间
void set_send_timeout (milliseconds timeout)
 设置发送超时时间
NEFORCE_NODISCARD milliseconds send_timeout () const noexcept
 获取发送超时时间
void set_recv_timeout (milliseconds timeout)
 设置接收超时时间
NEFORCE_NODISCARD milliseconds recv_timeout () const noexcept
 获取接收超时时间
void set_auto_reconnect (bool enable, int max_attempts=3)
 设置自动重连
NEFORCE_NODISCARD bool is_auto_reconnect () const noexcept
 检查是否启用自动重连
NEFORCE_NODISCARD int reconnect_attempts () const noexcept
 获取最大重连次数
NEFORCE_NODISCARD int current_reconnect_attempt () const noexcept
 获取当前重连尝试次数
void set_reconnect_delay (milliseconds delay)
 设置重连延迟时间
NEFORCE_NODISCARD milliseconds reconnect_delay () const noexcept
 获取重连延迟时间
void set_prefer_ipv6 (bool prefer) noexcept
 设置是否优先使用IPv6
NEFORCE_NODISCARD bool prefer_ipv6 () const noexcept
 检查是否优先使用IPv6
void set_dns_server (dns_client::config cfg)
 设置DNS服务器配置
void set_exception_handler (exception_handler_t handler)
 设置异常处理器
void set_connect_callback (connect_callback_t callback)
 设置连接成功回调
void set_disconnect_callback (disconnect_callback_t callback)
 设置断开连接回调
virtual bool connect (const string &host, ports port)
 连接到服务器
void disconnect () noexcept
 断开连接
ssize_t send (const void *data, size_t length)
 发送数据
ssize_t send (string_view data)
 发送字符串数据
bool send_all (const void *data, size_t length)
 发送所有数据(保证全部发送)
bool send_all (string_view data)
 发送所有字符串数据
ssize_t receive (void *buffer, size_t length)
 接收数据
vector< char > receive_all (size_t max_size=0)
 接收所有可用数据
bool receive_exact (memory_view< char > buffer)
 接收指定大小的数据
optional< stringreceive_line (size_t max_length=8192)
 接收一行数据(以\n结尾)
NEFORCE_NODISCARD bool is_connected () const noexcept
 检查是否已连接
NEFORCE_NODISCARD bool is_reconnecting () const noexcept
 检查是否正在重连
NEFORCE_NODISCARD const stringconnected_host () const noexcept
 获取当前连接的主机名
NEFORCE_NODISCARD ports connected_port () const noexcept
 获取当前连接的端口
NEFORCE_NODISCARD tcp_socketsocket ()
 获取底层socket引用
NEFORCE_NODISCARD const tcp_socketsocket () const
 获取底层socket常量引用
NEFORCE_NODISCARD dns_clientget_dns_client () noexcept
 获取DNS客户端
NEFORCE_NODISCARD const dns_clientget_dns_client () const noexcept
 获取DNS客户端常量引用

Protected 成员函数

virtual unique_ptr< tcp_socketcreate_socket ()=0
 创建新的socket对象
virtual bool post_connect ()
 连接建立后的额外处理
virtual void pre_disconnect ()
 连接断开前的清理工作
bool try_connect_to_ip (const string &ip, ports port)
 尝试连接到指定IP
bool reconnect_if_needed ()
 需要时执行重连
NEFORCE_ALWAYS_INLINE void handle_exception (const exception &e) const
 处理异常

Protected 属性

dns_client dns_
 DNS解析客户端
unique_ptr< tcp_socketsocket_
 TCP socket
string connected_host_
 已连接的主机名
ports connected_port_
 已连接的端口
int reconnect_attempts_ = 3
 最大重连次数
atomic< int > current_reconnect_attempt_ {0}
 当前重连次数
milliseconds connect_timeout_ {5000}
 连接超时
milliseconds send_timeout_ {5000}
 发送超时
milliseconds recv_timeout_ {5000}
 接收超时
milliseconds reconnect_delay_ {1000}
 重连延迟
bool auto_reconnect_ = false
 是否自动重连
bool prefer_ipv6_ = false
 是否优先IPv6
atomic< bool > is_reconnecting_ {false}
 是否正在重连
connect_callback_t connect_callback_
 连接成功回调
disconnect_callback_t disconnect_callback_
 断开连接回调
exception_handler_t exception_handler_
 异常处理器

详细描述

TCP客户端基类

提供TCP客户端的核心功能,包括连接管理、DNS解析、 数据收发和自动重连。派生类实现具体的socket创建。

在文件 tcp_client.hpp42 行定义.

构造及析构函数说明

◆ tcp_client_base()

tcp_client_base::tcp_client_base ( dns_client dns)
inlineexplicit

构造函数(带DNS客户端)

参数
dnsDNS客户端

在文件 tcp_client.hpp121 行定义.

引用了 dns_ , 以及 move().

成员函数说明

◆ connect()

virtual bool tcp_client_base::connect ( const string & host,
ports port )
virtual

连接到服务器

参数
host主机名或IP地址
port端口
返回
连接成功返回true

支持域名解析,自动尝试所有解析到的IP地址。 根据prefer_ipv6_设置决定IPv4/IPv6优先级。

◆ connect_timeout()

NEFORCE_NODISCARD milliseconds tcp_client_base::connect_timeout ( ) const
inlinenoexcept

获取连接超时时间

返回
超时时间

在文件 tcp_client.hpp145 行定义.

引用了 connect_timeout() , 以及 connect_timeout_.

被这些函数引用 connect_timeout().

◆ connected_host()

NEFORCE_NODISCARD const string & tcp_client_base::connected_host ( ) const
inlinenoexcept

获取当前连接的主机名

返回
主机名

在文件 tcp_client.hpp349 行定义.

引用了 connected_host_.

◆ connected_port()

NEFORCE_NODISCARD ports tcp_client_base::connected_port ( ) const
inlinenoexcept

获取当前连接的端口

返回
端口

在文件 tcp_client.hpp355 行定义.

引用了 connected_port_.

◆ create_socket()

virtual unique_ptr< tcp_socket > tcp_client_base::create_socket ( )
protectedpure virtual

创建新的socket对象

返回
socket智能指针

ssl_client , 以及 tcp_client 内被实现.

◆ current_reconnect_attempt()

NEFORCE_NODISCARD int tcp_client_base::current_reconnect_attempt ( ) const
inlinenoexcept

获取当前重连尝试次数

返回
当前次数

在文件 tcp_client.hpp197 行定义.

引用了 current_reconnect_attempt_.

◆ get_dns_client() [1/2]

NEFORCE_NODISCARD const dns_client & tcp_client_base::get_dns_client ( ) const
inlinenoexcept

获取DNS客户端常量引用

返回
DNS客户端常量引用

在文件 tcp_client.hpp381 行定义.

引用了 dns_.

◆ get_dns_client() [2/2]

NEFORCE_NODISCARD dns_client & tcp_client_base::get_dns_client ( )
inlinenoexcept

获取DNS客户端

返回
DNS客户端引用

在文件 tcp_client.hpp375 行定义.

引用了 dns_.

◆ handle_exception()

NEFORCE_ALWAYS_INLINE void tcp_client_base::handle_exception ( const exception & e) const
inlineprotected

处理异常

参数
e异常对象

在文件 tcp_client.hpp105 行定义.

引用了 exception_handler_.

◆ is_auto_reconnect()

NEFORCE_NODISCARD bool tcp_client_base::is_auto_reconnect ( ) const
inlinenoexcept

检查是否启用自动重连

返回
启用返回true

在文件 tcp_client.hpp185 行定义.

引用了 auto_reconnect_.

◆ is_connected()

NEFORCE_NODISCARD bool tcp_client_base::is_connected ( ) const
inlinenoexcept

检查是否已连接

返回
已连接返回true

在文件 tcp_client.hpp337 行定义.

引用了 socket_.

◆ is_reconnecting()

NEFORCE_NODISCARD bool tcp_client_base::is_reconnecting ( ) const
inlinenoexcept

检查是否正在重连

返回
正在重连返回true

在文件 tcp_client.hpp343 行定义.

引用了 is_reconnecting_.

◆ post_connect()

virtual bool tcp_client_base::post_connect ( )
inlineprotectedvirtual

连接建立后的额外处理

返回
处理成功返回true

ssl_client 重载.

在文件 tcp_client.hpp80 行定义.

◆ prefer_ipv6()

NEFORCE_NODISCARD bool tcp_client_base::prefer_ipv6 ( ) const
inlinenoexcept

检查是否优先使用IPv6

返回
优先返回true

在文件 tcp_client.hpp222 行定义.

引用了 prefer_ipv6_.

◆ receive()

ssize_t tcp_client_base::receive ( void * buffer,
size_t length )

接收数据

参数
buffer接收缓冲区
length缓冲区大小
返回
实际接收字节数,0表示连接关闭,-1表示错误

◆ receive_all()

vector< char > tcp_client_base::receive_all ( size_t max_size = 0)

接收所有可用数据

参数
max_size最大接收字节数(0表示无限制)
返回
接收到的数据

持续接收直到连接关闭或达到最大大小。

◆ receive_exact()

bool tcp_client_base::receive_exact ( memory_view< char > buffer)

接收指定大小的数据

参数
buffer接收缓冲区(指定大小)
返回
接收成功返回true

循环接收直到缓冲区填满或连接关闭。

◆ receive_line()

optional< string > tcp_client_base::receive_line ( size_t max_length = 8192)

接收一行数据(以\n结尾)

参数
max_length最大行长度
返回
行字符串(不含\n),失败返回none

支持\r\n和\n换行符。

◆ reconnect_attempts()

NEFORCE_NODISCARD int tcp_client_base::reconnect_attempts ( ) const
inlinenoexcept

获取最大重连次数

返回
重连次数

在文件 tcp_client.hpp191 行定义.

引用了 reconnect_attempts_.

◆ reconnect_delay()

NEFORCE_NODISCARD milliseconds tcp_client_base::reconnect_delay ( ) const
inlinenoexcept

获取重连延迟时间

返回
延迟时间

在文件 tcp_client.hpp210 行定义.

引用了 reconnect_delay_.

◆ reconnect_if_needed()

bool tcp_client_base::reconnect_if_needed ( )
protected

需要时执行重连

返回
重连成功返回true

◆ recv_timeout()

NEFORCE_NODISCARD milliseconds tcp_client_base::recv_timeout ( ) const
inlinenoexcept

获取接收超时时间

返回
超时时间

在文件 tcp_client.hpp171 行定义.

引用了 recv_timeout_.

◆ send() [1/2]

ssize_t tcp_client_base::send ( const void * data,
size_t length )

发送数据

参数
data数据指针
length数据长度
返回
实际发送字节数,失败返回-1

自动重连机制生效时,连接断开会尝试重连后发送。

引用了 data() , 以及 send().

被这些函数引用 send() , 以及 send().

◆ send() [2/2]

ssize_t tcp_client_base::send ( string_view data)
inline

发送字符串数据

参数
data字符串视图
返回
实际发送字节数,失败返回-1

在文件 tcp_client.hpp279 行定义.

引用了 data(), send() , 以及 send().

被这些函数引用 send().

◆ send_all() [1/2]

bool tcp_client_base::send_all ( const void * data,
size_t length )

发送所有数据(保证全部发送)

参数
data数据指针
length数据长度
返回
发送成功返回true

循环调用send()直到所有数据发送完毕。

引用了 data().

◆ send_all() [2/2]

bool tcp_client_base::send_all ( string_view data)
inline

发送所有字符串数据

参数
data字符串视图
返回
发送成功返回true

在文件 tcp_client.hpp296 行定义.

引用了 data() , 以及 send_all().

被这些函数引用 send_all().

◆ send_timeout()

NEFORCE_NODISCARD milliseconds tcp_client_base::send_timeout ( ) const
inlinenoexcept

获取发送超时时间

返回
超时时间

在文件 tcp_client.hpp158 行定义.

引用了 send_timeout_.

◆ set_auto_reconnect()

void tcp_client_base::set_auto_reconnect ( bool enable,
int max_attempts = 3 )

设置自动重连

参数
enable是否启用
max_attempts最大重连次数(默认3)
异常
value_exceptionmax_attempts为0或负数时抛出

◆ set_connect_callback()

void tcp_client_base::set_connect_callback ( connect_callback_t callback)
inline

设置连接成功回调

参数
callback回调函数

在文件 tcp_client.hpp240 行定义.

引用了 connect_callback_ , 以及 move().

◆ set_connect_timeout()

void tcp_client_base::set_connect_timeout ( milliseconds timeout)

设置连接超时时间

参数
timeout超时时间(毫秒)
异常
value_exceptiontimeout为0或负数时抛出

引用了 set_connect_timeout().

被这些函数引用 set_connect_timeout().

◆ set_disconnect_callback()

void tcp_client_base::set_disconnect_callback ( disconnect_callback_t callback)
inline

设置断开连接回调

参数
callback回调函数

在文件 tcp_client.hpp246 行定义.

引用了 disconnect_callback_ , 以及 move().

◆ set_dns_server()

void tcp_client_base::set_dns_server ( dns_client::config cfg)
inline

设置DNS服务器配置

参数
cfgDNS配置

在文件 tcp_client.hpp228 行定义.

引用了 dns_ , 以及 move().

◆ set_exception_handler()

void tcp_client_base::set_exception_handler ( exception_handler_t handler)
inline

设置异常处理器

参数
handler处理函数

在文件 tcp_client.hpp234 行定义.

引用了 exception_handler_ , 以及 move().

◆ set_prefer_ipv6()

void tcp_client_base::set_prefer_ipv6 ( bool prefer)
inlinenoexcept

设置是否优先使用IPv6

参数
prefer是否优先

在文件 tcp_client.hpp216 行定义.

引用了 prefer_ipv6_.

◆ set_reconnect_delay()

void tcp_client_base::set_reconnect_delay ( milliseconds delay)

设置重连延迟时间

参数
delay延迟时间
异常
value_exceptiondelay为负数时抛出

◆ set_recv_timeout()

void tcp_client_base::set_recv_timeout ( milliseconds timeout)

设置接收超时时间

参数
timeout超时时间(毫秒)
异常
value_exceptiontimeout为0或负数时抛出

◆ set_send_timeout()

void tcp_client_base::set_send_timeout ( milliseconds timeout)

设置发送超时时间

参数
timeout超时时间(毫秒)
异常
value_exceptiontimeout为0或负数时抛出

◆ socket() [1/2]

NEFORCE_NODISCARD tcp_socket & tcp_client_base::socket ( )

获取底层socket引用

返回
socket引用
异常
value_exception未连接时抛出

◆ socket() [2/2]

NEFORCE_NODISCARD const tcp_socket & tcp_client_base::socket ( ) const

获取底层socket常量引用

返回
socket常量引用
异常
value_exception未连接时抛出

◆ try_connect_to_ip()

bool tcp_client_base::try_connect_to_ip ( const string & ip,
ports port )
protected

尝试连接到指定IP

参数
ipIP地址
port端口
返回
连接成功返回true

该类的文档由以下文件生成: