网络_Boost.Asio库

Boost::Asio

Boost::Asio是一个用于网络和异步编程的C++库,它提供了一套跨平台的网络编程接口,能够方便地创建客户端和服务器应用程序。Boost::Asio支持同步和异步操作,可以处理多种类型的网络协议,包括TCP、UDP、SSL等。

安装

1
sudo apt-get install libboost-all-dev

cmake配置

在Linux系统上,除了链接boost库以外,还需要链接pthread库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmake_minimum_required(VERSION 3.10.0)
project(boost-asio-demo VERSION 0.1.0 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 11)

find_package(Boost REQUIRED COMPONENTS system)

include_directories(${Boost_INCLUDE_DIRS})

add_executable(server server.cpp)
target_link_libraries(server ${Boost_LIBRARIES} pthread)

add_executable(client client.cpp)
target_link_libraries(client ${Boost_LIBRARIES} pthread)

demo

服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <boost/asio.hpp>
int main(int argc, char *argv[])
{
boost::asio::io_service service;
boost::asio::ip::tcp::acceptor acceptor(service,
boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 8888));
std::cout << "Server started, listening on port 8888" << std::endl;

while (1)
{
boost::asio::ip::tcp::socket socket(service);
acceptor.accept(socket);
std::cout <<"Connection" << std::endl;

std::string msg = "Hello From Boost.Asio Server\n";
boost::system::error_code err;
boost::asio::write(socket, boost::asio::buffer(msg), err);
}
}

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <boost/asio.hpp>
int main(int argc, char *argv[])
{
boost::asio::io_service service;
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 8888);
boost::asio::ip::tcp::socket socket(service);
socket.connect(endpoint);

boost::asio::streambuf buf;
boost::asio::read_until(socket, buf, "\n");

std::istream in(&buf);
std::string msg;
std::getline(in, msg);
std::cout << "Received msg from server: " << msg << std::endl;
}

测试

1
2
3
mrcan@ubuntu:~/boost-asio-demo/build$ ./server 
Server started, listening on port 8888
Connection
1
2
mrcan@ubuntu:~/boost-asio-demo/build$ ./client 
Received msg from server: Hello From Boost.Asio Server