C++11重写muduo网络库2—Cmake,nocopyable,logger,Timestamp,InetAddress

六、构建项目编译CMake文件_ev

创建mymuduo目录,作为项目工程名
在mymuduo下创建CMakeLists.txt

cmake_minimum_required(VERSION 2.5)
project(mymuduo)

# cmake => makefile   make
# mymuduo最终编译成so动态库,设置动态库的路径,放在根目录的lib文件夹下面
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 设置调试信息 以及 启动C++11语言标准
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -fPIC")

# 定义参与编译的源代码文件 
aux_source_directory(. SRC_LIST)
# 编译生成动态库mymuduo
add_library(mymuduo SHARED ${SRC_LIST})

七、noncopyable代码

TcpServer、很多类都是继承noncopyable,是私有继承
在这里插入图片描述
这样继承后派生类都被限制不能进行拷贝构造和赋值,这样是为了避免在所有的类中都要有禁止拷贝构造和赋值的代码。

八、Logger日志系统

1、几种日志信息等级

INFO,  // 普通信息
ERROR, // 错误信息
FATAL, // core信息     致命性信息
DEBUG, // 调试信息  到时候不让这里显示

2、

【技巧】自己从后面加下划线,比如logLevel_,是为了和系统的变量不产生冲突

九、Timestamp

格式化系统时间
1、无参构造函数(默认值设为0)
2、有参构造函数(加入explicit禁止默认对象转换)
3、now成员函数(返回现在时间)
4、toString成员函数(将现在时间格式转换为string类型的)

最终效果Timestamp::now().toString()将会返回当前时间

10、InetAddress

封装socket地址类型
成员私有变量 sockaddr_in addr_
1、构造函数 用ip和端口初始化(默认端口为0 ip为本地127.0.0.1)
2、构造函数 用sockaddr_in初始化
3、toIp成员函数方法 (将sockaddr的ip转换为网络字节序的ip)
4、toIpPort()成员函数方法(将sockaddr类型转换为ip:port字符串类型)
5、toPort()成员函数方法(将sockaddr类型转换返回port的字符串类型)

#include "InetAddress.h"

#include <strings.h>
#include <stdio.h>
#include <string.h>

InetAddress::InetAddress(uint16_t port, std::string ip)
{
    bzero(&addr_, sizeof addr_);
    addr_.sin_family = AF_INET;
    addr_.sin_port = htons(port);
    addr_.sin_addr.s_addr = inet_addr(ip.c_str());
}

std::string InetAddress::toIp() const
{
    // addr_
    char buf[64] = {0};
    ::inet_ntop(AF_INET, &addr_.sin_addr, buf, sizeof buf);
    return buf;
}

std::string InetAddress::toIpPort() const
{
    // ip:port
    char buf[64] = {0};
    ::inet_ntop(AF_INET, &addr_.sin_addr, buf, sizeof buf);
    size_t end = strlen(buf);
    uint16_t port = ntohs(addr_.sin_port);
    sprintf(buf+end, ":%u", port);
    return buf;
}

uint16_t InetAddress::toPort() const
{
    return ntohs(addr_.sin_port);
}

#include <iostream>
int main()
{
    InetAddress addr(8080);
    std::cout << addr.toIpPort() << std::endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贪睡的蜗牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值