io_service 提供服务监听,有四个方法 run ,run_one ,poll ,poll_one,这里主要实现run
void on_read(const boost::system::error_code &err, std::size_t bytes);
void on_write(const boost::system::error_code &err, std::size_t bytes){
sock.async_read_some(buffer(buff_read),on_read);
}
void on_read(const boost::system::error_code & err, std::size_t bytes) { /*处理读取操作*/ sock.async_write_some(buffer(buff)write,3),on_write);}
void on_connect(const boost::system::error_code &err){
sock.async_read_some(buffer(buff_read),on_read);
}
int main(int argc, char * argv[]){
ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"),2001);
sock.async_connect(ep,on_connect);
service.run();
- 当service.run()被调用时,有一个异步操作在等待。
- 当socket连接到服务端时,on_connect被调用了,它会添加一个异步操作。
- 当on_connect结束时,我们会留下一个等待的操作(read)。
- 当on_read被调用时,我们写入一个回应,这又添加了另外一个等待的操作。
- 当on_read结束时,我们会留下一个等待的操作(write)。
- 当on_write操作被调用时,我们从服务端读取另外一个消息,这也添加了另外一个等待的操作。
- 当on_write结束时,我们有一个等待的操作(read)。
- 然后一直继续循环下去,直到我们关闭这个应用。