基于Reactor模型的高性能网络库之地址篇

简介: 这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)

这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)

class  InetAddress
{
public:
    explicit    InetAddress(uint16_t port=0,std::string ip="127.0.0.1");
    //使用指定的 ip 和 port 创建一个地址对象,默认是 127.0.0.1:0

    //允许通过已有的 sockaddr_in 结构体直接构造 InetAddress 对象
    explicit    InetAddress(const  sockaddr_in &addr):addr_(addr)
    {}
    std::string  toIp()const;//将 addr_ 中的 IP 地址转为字符串,例如 "192.168.1.1"
    std::string   toIpPort()const;//返回 "IP:Port" 格式的字符串,例如 "192.168.1.1:8080"。
    uint16_t   toPort()const;//返回端口号(从网络字节序转换为主机字节序)。

    const  sockaddr_in*  getSockAddr()const
    {
        return    &addr_;//获取原始 sockaddr_in 指针,便于与 bind(), connect() 等系统调用接口对接
    }
    void  setSockAddr(const  sockaddr_in &addr ){addr_=addr;}//设置内部地址,通常用于接受连接后的地址填充
private:
    sockaddr_in  addr_;//表示一个 IPv4 网络地址,包含 IP 地址和端口
};

函数实现

InetAddress::InetAddress(uint16_t port,std::string ip)
{
    bzero(&addr_,sizeof addr_);//清零结构体内存
    addr_.sin_family=AF_INET;//将地址族设置为 AF_INET,表示使用 IPv4 地址
    addr_.sin_port=htons(port);//将主机字节序转换为网络字节序,并赋值给 sin_port。这是因为网络传输中使用的是大端字节序。
    addr_.sin_addr.s_addr=inet_addr(ip.c_str());/// 将 IP 字符串转为网络字节序的整型地址
   
}
std::string  InetAddress::toIp()const// 将二进制 IP 转换为字符串:
{
    //addr
    char buf[64]={0};// // 分配缓冲区存放最终 "IP:端口" 字符串
    inet_ntop(AF_INET,&addr_.sin_addr,buf,sizeof buf);// 把二进制的 IP 地址转换为字符串形式,写入 buf
    return buf;
}
std::string   InetAddress::toIpPort()const// 返回完整的地址字符串,如 "127.0.0.1:8080"。
{
    //ip::port
    char buf[64]={0};
    inet_ntop(AF_INET,&addr_.sin_addr,buf,sizeof buf);// 将二进制 IP 转换为字符串:
    size_t  end=strlen(buf); // 获取 IP 字符串的长度,作为端口拼接的起点
    uint16_t   port=ntohs(addr_.sin_port);//获取主机字节序的端口号(用 ntohs 由网络字节序转回来)。
    sprintf(buf+end,":%u",port);//   // 在 buf 的末尾继续拼接 ":端口" 字符串
    return   buf;
}
uint16_t   InetAddress::toPort()const
{
        return   ntohs(addr_.sin_port);// // 将网络字节序的端口号转换为主机字节序并返回
}
相关文章
|
2月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
60 2
|
2月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
2月前
基于Reactor模式的高性能网络库github地址
https://github.com/zyi30/reactor-net.git
48 0
|
26天前
|
算法 安全 网络安全
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
219 17
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
171 10
|
9月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
9月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
175 10
|
9月前
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。
|
9月前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。

热门文章

最新文章