//boost :boost_1_51 // 1_44没有boost::asio::connect函数..与官网的向导不符... // (其实不是不符..代码与文档要匹配,看清稳定版还是最新版) // 可以用socket.connect... // //CONTENT //Introduction to Sockets //内容引用URL :http://think-async.com/Asio/boost_asio_1_5_3/doc/html/boost_asio/tutorial.html //first class :daytime protocol TCP //synchronous TCP Daytime client //date: 2012-12-24 #include "iostream" #include "boost/array.hpp" #include "boost/asio.hpp" using boost::asio::ip::tcp; void daytime_client() { try{ //所有使用ASIO的程序最少有一个io_service对象 boost::asio::io_service io_service; //将服务器名字转换为TCP endpoint tcp::resolver resolver(io_service); std::string host ="192.168.3.144" ;//specify the host //resolver需要一个query对象,并将query转换为a list of endpoints //host name,也就是IP地址 //the name of service,也就是端口... tcp::resolver::query query(tcp::v4(),host,"13"); // tcp::resolver::query query(tcp::v4(),argv[1], "13"); //ip::tcp::resolver::iterator来保存list of endpoints tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); //创建socket tcp::socket socket(io_service); //list of endpoints 可能包含IPV4 /IPV6 endpoint, //需要一个个测试找到可以用的,可以使程序兼容IP的版本 //这些工作由boost::asio::connect自动完成。 //连接socket //如果是boost1_44:error C2039: 'connect' : is not a member of 'boost::asio' boost::asio::connect(socket, endpoint_iterator); //read the response from the daytime service for(;;) { boost::array<char,128>buf; boost::system::error_code error; //boost::asio::buffer确定缓冲大小并防止越界. size_t len = socket.read_some(boost::asio::buffer(buf),error); //当Server关闭连接的时候,read_some返回boost::asio::error::eof if(error == boost::asio::error::eof) break; else if(error) throw boost::system::system_error(error); std::cout.write(buf.data(),len); } } catch(std::exception &e) { std::cerr <<e.what() <<std::endl; } } //CONTENT //内容引用URL :http://think-async.com/Asio/boost_asio_1_5_3/doc/html/boost_asio/tutorial/tutdaytime2.html //A synchronous TCP Daytime server //date: 2012-12-26 #include<ctime> #include<iostream> #include<string> #include<boost/asio.hpp> using boost::asio::ip::tcp; std::string make_daytime_string(){ using namespace std; //for time_t ,time ,ctime time_t now = time(0); return ctime(&now); } void daytime_server(){ try{ boost::asio::io_service io_service; //创建一个ip::tcp::acceptor用来监听连接. //初始化为监听TCP port 13, IPV4 tcp::acceptor acceptor(io_service,tcp::endpoint(tcp::v4(),13)); //情况2:创建一个连接,循环发送数据... tcp::socket socket(io_service); acceptor.accept(socket); for(;;) { //情况1:创建一个代表连接的socket,等待连接...只发送一次数据后析构.. //tcp::socket socket(io_service); //acceptor.accept(socket); //传送当前时间... std::string message = make_daytime_string(); boost::system::error_code ignored_error; boost::asio::write(socket,boost::asio::buffer(message),ignored_error); } } catch(std::exception &e) { std::cerr<<e.what()<<std::endl; } return ; } // #include "boost/thread/thread.hpp" void class6(){ boost::thread t(daytime_server); daytime_client(); //1. //ser中:代表连接的socket(for循环中的tcp::socket socket) // 作为局部变量当再次循环时会析构,导致连接断开 // client:中读到boost::asio::error::eof, //client退出,daytime_client()返回, //线程t析构,函数结束... //程序输出: //input your choice //6 //Thu Dec 27 13:07:43 2012 //input your choice //2. //如果ser中代表连接的tcp::socket在for外部 //input your choice //6 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 27 13:21:32 2012 //Thu Dec 2 //无止境的时间... //断点中止后...可以看到,会将服务器发的数据一起收到, //而且没有做同步的效果..收到一半的数据... }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ezhong的博客签名-------------------------------------
以上内容来自ezhong的博客园,作者:ezhong
ezhong的博客园: http://www.cnblogs.com/ezhong
感谢您的阅读。感谢您的分享。