Boost C++: 网络编程1

  1 #include <iostream>

  2 #include <boost/asio.hpp>

  3 #include <boost/config/compiler/visualc.hpp>

  4 #include <boost/property_tree/ptree.hpp>

  5 #include <boost/property_tree/json_parser.hpp>

  6 #include <boost/foreach.hpp>

  7 #include <boost/filesystem.hpp>

  8 #include <boost/filesystem/fstream.hpp>

  9 #include <boost/iostreams/device/mapped_file.hpp>

 10 #include <cassert>

 11 #include <exception>

 12 #include <sstream>

 13 #include <string>

 14 #include <boost/thread.hpp>

 15 

 16 

 17 

 18 void test_http()

 19 {

 20     using namespace boost::asio;

 21     ip::tcp::iostream stream;

 22 

 23     stream.expires_from_now(boost::posix_time::seconds(60));

 24     stream.connect("www.boost.org", "http");

 25     stream << "GET /LICENSE_1_0.txt HTTP/1.0\r\n";

 26     stream << "Host: www.boost.org\r\n";

 27     stream << "Accept: */*\r\n";

 28     stream << "Connection: close\r\n\r\n";

 29 

 30     stream.flush();

 31     std::cout << stream.rdbuf();

 32 }

 33 

 34 void udp_echo_client()

 35 {

 36     

 37     using boost::asio::ip::udp;

 38     boost::asio::io_service my_io_service;

 39     udp::socket s(my_io_service, udp::endpoint(udp::v4(), 0));

 40 

 41     udp::resolver resolver(my_io_service);

 42 }

 43 

 44 int read_file_content(std::string fileName, std::stringstream& ss)

 45 {

 46     namespace fs = boost::filesystem;

 47     fs::path file(fileName);

 48     if (!fs::exists(file))

 49     {

 50         std::cerr << "file does not exist." << std::endl;

 51         return EXIT_FAILURE;

 52     }

 53 

 54     //std::ifstream t(file) >> ss; 

 55     fs::ifstream t(file);

 56     ss << t.rdbuf();

 57 //     boost::iostreams::mapped_file mf(file);

 58 //     mf.data() >> ss;

 59     

 60     return EXIT_SUCCESS;

 61 }

 62 

 63 void print_json_data(boost::property_tree::ptree const& pt)

 64 {

 65     using boost::property_tree::ptree;

 66     ptree::const_iterator end = pt.end();

 67     for (ptree::const_iterator it = pt.begin(); it != end; it++)

 68     {

 69         std::cout << it->first << ": " << it->second.get_value<std::string>() << std::endl;

 70         print_json_data(it->second);

 71     }

 72 }

 73 

 74 int parse_json_data()

 75 {

 76     try

 77     {

 78         std::stringstream ss;

 79 

 80         read_file_content("data.json",ss);

 81         //ss << "{ \"root\": { \"values\": [1, 2, 3, 4, 5 ] } }";

 82 

 83         std::cout << ss.str() << std::endl;

 84 

 85         boost::property_tree::ptree pt;

 86         boost::property_tree::read_json(ss, pt);

 87 

 88         BOOST_FOREACH(boost::property_tree::ptree::value_type& v, pt.get_child("editorialMarket"))

 89         {

 90             assert(v.first.empty());

 91             std::cout << v.second.data() << std::endl;

 92         }

 93 

 94         print_json_data(pt);

 95     }

 96     catch (std::exception& e)

 97     {

 98         std::cerr << "error: " << e.what() << std::endl;

 99     }

100 

101     return EXIT_SUCCESS;

102 }

103 

104 /*

105 函数 main() 首先定义了一个 I/O 服务 io_service,用于初始化 I/O 对象 timer。

106 就象 boost::asio::deadline_timer 那样,所有 I/O 对象通常都需要一个 I/O 服务作为它们的构造函数的第一个参数。

107 由于 timer 的作用类似于一个闹钟,所以 boost::asio::deadline_timer 的构造函数可以传入第二个参数,

108 用于表示在某个时间点或是在某段时长之后闹钟停止。 以上例子指定了五秒的时长,该闹钟在 timer 被定义之后立即开始计时

109 */

110 

111 void handler1(const boost::system::error_code& ec)

112 {

113     std::cout << "5 s" << std::endl;

114     for (int i = 0; i < 10; i++)

115     {

116         printf("%s: %d\n",__FUNCTION__, i);

117         boost::this_thread::sleep(boost::posix_time::seconds(1));

118     }

119 }

120 

121 void handler2(const boost::system::error_code& ec)

122 {

123     std::cout << "5 s" << std::endl;

124     for (int i = 0; i < 10;i++)

125     {

126         printf("%s: %d\n", __FUNCTION__, i);

127         boost::this_thread::sleep(boost::posix_time::seconds(1));

128     }

129 }

130 

131 boost::asio::io_service io_service1;

132 boost::asio::io_service io_service2;

133 void run1()

134 {

135     printf("in %s\n", __FUNCTION__);

136     io_service1.run();

137 }

138 

139 void run2()

140 {

141     printf("in %s\n", __FUNCTION__);

142     io_service2.run();

143 }

144 

145 void test_io_srv()

146 {

147     //boost::asio::io_service io_service;

148     //创建5s定时器

149     boost::asio::deadline_timer timer1(io_service1, boost::posix_time::seconds(5));

150     timer1.async_wait(handler1);

151 

152     //创建5s定时器

153     boost::asio::deadline_timer timer2(io_service2, boost::posix_time::seconds(5));

154     timer2.async_wait(handler2);

155 

156     //io_service.run();

157     boost::thread thread1(run1);

158     boost::thread thread2(run2);

159 

160     thread1.join();

161     thread2.join();

162 }

163 

164 

165 int main()

166 {

167     //parse_json_data();

168     test_io_srv();

169     std::cout << "test_io_srv..." << std::endl;

170 }

 

你可能感兴趣的:(boost)