《http篇》boost.asio下载和编译

Home / C++ MrLee 6月前 194

解压

我这里直接解压到D盘,解压后目录【D:\boost_1_73_0】

最上层结构:

#存放配置脚本和说明文件

├── boost                 # 最重要的目录,90%以上的Boost程序库源码都在这里

├── doc                   # HTML 格式的文档,也可以生成PDF格式文档

├── libs                  # 所有组件的示例、测试、编译代码和说明文档

├── more                  # 库作者相关的文档

├── status                # 用于测试Boost库的各个组件

└── tools                 # b2、quickbook等自带工具

Boost目录结构:(在大多数情况下,我们只需要关心boost子目录,这里面以头文件的形式分门别类地存放了我们要使用的库代码)

├── accumulators          # 累加器库

├── algorithm             # 算法库

├── align                 # 内存对齐库

├── archive               # 序列化库

├── asio                  # 异步并发库

├── assert                # 断言库

├── assign                # 赋值初始化库

├── atomic                # 原子操作库

├── beast   # 高级网络通信库

├── bimap                 # 双向关联数组

├── bind                  # bind表达式

├── chrono                # 时间处理库

...   # 其他库

├── python                # python库   (把C++类和函数映射到Python之中)

├── yap                   # 表达式模板库

...

编译

注意:

1、Boost库的头文件与我们平常所用的头文件*.h或C++标准库的头文件(没有后缀名)不同,这正是Boost的独特之处。它把C++类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp。

2.这里需要说明一下,刚开始拿到压缩包解压后,想着能够像GDAL库一样,直接拷贝到工程目录下进行包含引用。然而发现引用进去文件报错不能打开。 所以boost库不能直接拷贝进去使用,对于有些文件还是需要编译一下静态库进而引用的。这里的编译与GDAL和OpenCV的安装有一定的区别,这里的编译安装,只是在对应的文件下生成静态库。

执行bat

以管理员身份运行“VS 2015 的 x64 本机工具命令提示”

image

执行命令

cd D:\

bootstrap.bat // 执行失败需要查看bootstrap.log,成功后会得到b2.exe,

如果没有生成b2.exe,说明生成失败,看bootstrap.log报错。这里是因为vs工具集版本原因。

等待程序编译完成,会在目录下生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.4G左右,可以直接删除。stage下才是生成的lib文件。文件如下:

说明:

这里通过双击b2.exe进行编译的,默认在stage下生成lib文件夹,里面只包含着静态库。如果想要生成dll动态库,可./b2 --help查看参数说明,然后需要输入相应的编译命令如

配置

(图片目录与实际不一样,只是作位置参考)

测试使用

代码如下:

// 工程:属性 =》配置属性 =》C/C++ =》常规 =》附加包含目录 填上:D:\boost_1_73_0
// 工程:属性 =》配置属性 =》链接器 =》常规 =》附加库目录 填上:D:\boost_1_73_0\stage\lib
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[])
{
 std::string file;
 std::cin >> file;
 std::cout << file << " : " << file_size(file) << std::endl;
 return 0;
}

http服务简单实现

#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
using ip::tcp;
void handle_request(tcp::socket& socket)
{
	try
	{
		boost::asio::streambuf buf;
		read_until(socket, buf, "\r\n");
		std::istream input(&buf);
		std::string request_method;
		input >> request_method;
		// 解析请求方法、路径等信息
		// 构建响应内容
		std::string response = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!";
		boost::asio::write(socket, boost::asio::buffer(response));
	}
	catch (std::exception& e)
	{
		std::cerr << "Exception in thread: " << e.what() << "\n";
	}
}
void start_server()
{
	boost::asio::io_service io_service;
	tcp::endpoint endpoint(tcp::v4(), 8000);
	tcp::acceptor acceptor(io_service, endpoint);
	while (true)
	{
		tcp::socket socket(io_service);
		acceptor.accept(socket);
		std::thread(handle_request, std::move(socket)).detach();
	}
}
int main()
{
	start_server();
	return 0;
}


本文链接:https://www.it72.com/12739.htm

推荐阅读
最新回复 (0)
返回