一個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;
}
相關文章
- C#中自己動手建立一個Web Server(非Socket實現)C#WebServer
- socket阻塞與非阻塞,同步與非同步、I/O模型非同步模型
- Socket程式設計中的同步、非同步、阻塞和非阻塞(轉)程式設計非同步
- C++ Boost 之Python(一個簡單的例子) (轉)C++Python
- 使用Boost對非值語義的C++類實現noncopyableC++
- C/C++利用Boost::Asio網路庫建立自己的Socket伺服器C++伺服器
- Netty實現的一個非同步Socket程式碼Netty非同步
- Ubuntu下安裝C++ boost庫UbuntuC++
- C++使用Boost多執行緒C++執行緒
- Signals-The Boost C++ LibrariesC++
- Boost Test學習總結(C++)C++
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- boost::asio設定同步連線超時
- 一篇文章讀懂阻塞,非阻塞,同步,非同步非同步
- (一)你的第一個Socket程式
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- 非同步Socket寫聊天程式非同步
- telnet連線socket serverServer
- 完善的Socket Server程式 (轉)Server
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- 《初識TCP》iOS、macOS實現socket client與socket serverTCPiOSMacclientServer
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 每週一個 Python 模組 | socketPython
- server端雙socket 設計方式Server
- C++客戶端程式(socket)C++客戶端
- 同步、非同步、阻塞、非阻塞的區別非同步
- Boost.Asio基礎(五) 非同步程式設計初探非同步程式設計
- Boost.Asio和ACE之間關於Socket程式設計的比較程式設計
- C++跨平臺庫boost和Poco的編譯C++編譯
- 徹底搞懂同步非同步與阻塞非阻塞非同步