手撸HTTP是理解HTTP的最好方式(1)

本文是手撸HTTP系列的第一篇,介绍了如何使用Cmake管理和编译项目,选择了sockpp库来实现一个简单的TCP Echo服务器。通过学习Cmake的基本用法和sockpp的接口,读者可以了解如何在C++中使用现代socket库进行网络通信。
摘要由CSDN通过智能技术生成

创建于 2020-07-31,最终修订于 2020-08-06

在之前的介绍课程(零)中我们说了要用六节课来实现一个HTTP,

今天的任务是 “[易]简单的Cmake的教程,选用一个Socket库并实现一个echo”。

所有的代码都在 https://github.com/dashjay/http_demo/tree/master/1-cmake-socket-echo

Let’s do it

0x1 编写一个HelloWorld并尝试使用Cmake编译它

#include<iostream>

int main(){
   
    std::cout << "Hello World!" << '\n';
}

我们本可以使用如下命令进行编译并且运行

g++ -o main main.cpp
./main
Hello World!

但是我们要尝试使用一次Cmake[1]

# 指定cmake的版本,随意了,我们不会用太高级的功能
cmake_minimum_required(VERSION 3.16)

# set可以设定一个变量
set(project_name http_demo)

# 项目名称 ${xxxx} 可以导入之前的变量
project(${project_name})

set(CMAKE_CXX_COMPILER "c++") # 编译器
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_STANDARD 17) # cpp指定标准

# 设定编译的FLAGS
set(CMAKE_CXX_FLAGS -g -W)
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
message(STATUS "CMAKE_CXX_FLAGS: " "${CMAKE_CXX_FLAGS}")

# 添加一个可执行文件
add_executable(main main.cpp)

通常情况下我们不会再项目目录里执行 cmake . ,这会导致很多混乱的问题,我们通常创建一个build文件夹做这个操作

mkdir build; cd build
cmake .. && make
./main
Hello World!

build目录下会产生很多文件,通常我们不用理会他们,只需要管我们的输出文件即可。

为什么弄这么麻烦的东西

make新手教程

当项目复杂到一定程度时,有大量自动化的操作可以节省我们的时间,例如我们可以针对Hello World输出生成一个测试,每次编写完程序,我们只需要make一下(如果cmake文件没有变化的话),然后运行make test来进行自动化测试(测试样例需要我们自己编写)。当然这个Cmake在本次项目中的作用也不是很能体现出优势,但是笔者认为仍然有必要学习这种自动化工具。

0x2 选用一个cpp的socket库

经过一些挑选,选中了一个叫Sockpp的库。这个库用法很“现代”CPP,十分舒适,有很多上古socket库,用法或者代码比较古老了,我就只推荐这个了。

安装也很简单

git clone https://github.com/fpagliughi/sockpp
cd sockpp; mkdir build; cd build
cmake .. && make && sudo make install

这样,sockpp就安装到你系统中了,确切的说是分别安装了头文件和依赖库到你系统的 include 和 lib 中。

1. 了解sockpp的使用

我们在本节课中暂时只简单的使用 tcp 接收一些数据,因此我们在本节课程里只引入 sockpp 的一个头部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值