一個C++ boost非同步socket server
編譯
g++ main.cpp -o main -lpthread -lboost_system
原始碼
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
// 非同步伺服器類
class Server {
private:
// 服務例項
boost::asio::io_service& ios_;
// 接收器例項
boost::asio::ip::tcp::acceptor acceptor_;
// socket智慧指標
typedef boost::shared_ptr<boost::asio::ip::tcp::socket> socket_ptr;
public:
Server(boost::asio::io_service& _ios) : ios_(_ios),
acceptor_(_ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 13695)) {
// 預設執行
start();
}
// 啟動網路偵聽的操作入口
void start(void) {
// 自定義的智慧指標
socket_ptr socket(new boost::asio::ip::tcp::socket(ios_));
// 非同步偵聽,若有服務連線,則自動呼叫Server::handler_accept函式,並將error, socket傳入作為引數
acceptor_.async_accept(*socket,
boost::bind(&Server::accept_handler, this,
boost::asio::placeholders::error/* 此處作為佔位符 */, socket));
}
// 請求者響應後觸發的處理器
void accept_handler(const boost::system::error_code& _ec, socket_ptr _socket) {
// 錯誤碼檢測
if (_ec) {
return;
}
// 列印當前連線進來的客戶端
std::cout << "client: " << _socket->remote_endpoint().address() << std::endl;
// 非同步傳送 "hello CSND_Ayo" 訊息到客戶端,傳送成功後,自動呼叫Server::write_handler函式
_socket->async_write_some(boost::asio::buffer("hello CSND_Ayo"),
boost::bind(&Server::write_handler, this,
boost::asio::placeholders::error/* 此處作為佔位符 */));
// 啟動新的非同步監聽
start();
}
// 完成非同步寫操作後的處理器
void write_handler(const boost::system::error_code& _ec) {
std::cout << "server: send message complete." << std::endl;
}
};
int main(void) {
try {
std::cout << "server start." << std::endl;
// 建造服務物件
boost::asio::io_service ios;
// 構建Server例項
Server server(ios);
// 啟動非同步呼叫事件處理迴圈
ios.run();
}
catch (std::exception& _e) {
std::cout << _e.what() << std::endl;
}
std::cout << "server end." << std::endl;
return 0;
}
相關文章
- socket阻塞與非阻塞,同步與非同步、I/O模型非同步模型
- C/C++利用Boost::Asio網路庫建立自己的Socket伺服器C++伺服器
- Netty實現的一個非同步Socket程式碼Netty非同步
- Signals-The Boost C++ LibrariesC++
- telnet連線socket serverServer
- Ubuntu下安裝C++ boost庫UbuntuC++
- C++使用Boost多執行緒C++執行緒
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 《初識TCP》iOS、macOS實現socket client與socket serverTCPiOSMacclientServer
- server端雙socket 設計方式Server
- (一)你的第一個Socket程式
- 一篇文章讀懂阻塞,非阻塞,同步,非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- python3:利用socket建立的一個簡單的聊天client端和server端例項PythonclientServer
- Windows10 VS2017 C++ Server Socket簡單伺服器端與客戶端WindowsC++Server伺服器客戶端
- 每週一個 Python 模組 | socketPython
- Boost.Asio和ACE之間關於Socket程式設計的比較程式設計
- SQL Server索引 - 非聚集索引SQLServer索引
- java同步非阻塞IOJava
- linux下使用boost.python呼叫c++動態庫LinuxPythonC++
- C++跨平臺庫boost和Poco的編譯C++編譯
- 同步、非同步、阻塞、非阻塞的區別非同步
- 簡單練習Microsoft SQL Server MERGE同步兩個表ROSSQLServer
- php實現一個簡單的socketPHP
- 簡單解析C++基於Boost庫實現命令列C++命令列
- Socket Server 的 N 種併發模型彙總Server模型
- Socket Server的N種併發模型彙總Server模型
- socket.io client + socketio-netty server簡析clientNettyServer
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- SeaTunnel如何建立Socket資料同步作業?
- C++中簡單使用HP-SocketC++
- 阻塞非阻塞和同步非同步的區分 參考一些書籍非同步
- 透過一個示例形象地理解C# async await 非並行非同步、並行非同步、並行非同步的併發量控制C#AI並行非同步