消息通信Client端

基于boost实现的消息通信Client端,目前仅用于发送消息。

 1 #ifndef __cooper_client_h_
 2 #define __cooper_client_h_
 3 
 4 #include "cooper_message.h"
 5 
 6 using boost::asio::ip::tcp;
 7 
 8 //----------------------------------------------------------------------
 9 
10 class CooperClient
11 {
12 public:
13     CooperClient(boost::asio::io_service& io_service,
14                     tcp::resolver::iterator endpoint_iterator);
15     ~CooperClient();
16     void AsyncWrite(msg_ptr msg);
17 
18 private:
19     void HandleConnect(const boost::system::error_code& error,
20                         tcp::resolver::iterator endpoint_iterator);
21     void HandleWrite(const boost::system::error_code& error);
22     void Close();
23 
24 private:
25     tcp::socket socket_;
26     boost::asio::io_service& io_service_;
27 };
28 
29 #endif // __cooper_client_h_

 

 1 #include "cooper_client.h"
 2 
 3 //----------------------------------------------------------------------
 4 
 5 CooperClient::CooperClient(boost::asio::io_service& io_service,
 6     tcp::resolver::iterator endpoint_iterator)
 7         : socket_(io_service), io_service_(io_service)
 8 {
 9     tcp::endpoint endpoint = *endpoint_iterator;
10     socket_.async_connect(endpoint,
11         boost::bind(&CooperClient::HandleConnect, this,
12             boost::asio::placeholders::error, ++endpoint_iterator));
13 }
14 
15 CooperClient::~CooperClient()
16 {
17     printf("client exit\n");
18     Close();
19 }
20 
21 void CooperClient::AsyncWrite(msg_ptr msg)
22 {
23     boost::asio::async_write(socket_,
24         boost::asio::buffer(msg->get_data(), msg->get_data_length()),
25         boost::bind(&CooperClient::HandleWrite, this,
26             boost::asio::placeholders::error));
27 }
28 
29 void CooperClient::HandleConnect(const boost::system::error_code& error,
30     tcp::resolver::iterator endpoint_iterator)
31 {
32     if (error) {
33         Close();
34     } else if (endpoint_iterator != tcp::resolver::iterator()) {
35         socket_.close();
36         tcp::endpoint endpoint = *endpoint_iterator;
37         socket_.async_connect(endpoint,
38             boost::bind(&CooperClient::HandleConnect, this,
39                 boost::asio::placeholders::error, ++endpoint_iterator));
40     }
41 }
42 
43 void CooperClient::HandleWrite(const boost::system::error_code& error)
44 {
45     printf("Write msg done.\n");
46     Close();
47 }
48 
49 void CooperClient::Close()
50 {
51     socket_.close();
52     io_service_.stop();
53 }

 

posted @ 2017-10-09 15:18  lausaa  阅读(214)  评论(0)    收藏  举报