boost::asio::tcp 同步

 

//服务端
#include <cstdio>
#include
<iostream> #include <sstream> #include <boost/asio.hpp> #include <boost/bind.hpp> #include <boost/thread/thread.hpp> using namespace boost::asio; typedef boost::shared_ptr<ip::tcp::socket> socket_Ptr; void cilent_session(socket_Ptr socket); int main() { //必须定义一个io_service实例,使用io_service与系统的输入输出进行交互 io_service service; //TCP端点的类型, 监听端口 ip::tcp::endpoint ep(ip::tcp::v4(), 7200); //TCP接受器类型 ip::tcp::acceptor accept(service, ep); while (true) { //定义客户端的套接字 socket_Ptr cli_socket(new ip::tcp::socket(service)); //阻塞,等待客户端连接 accept.accept(*cli_socket); // 打印与本机服务器取得连接的客户端IP地址 std::cout << "client IP: " << cli_socket->remote_endpoint().address() << std::endl; //一个连接,一个线程,在线程中操作读写socket。 boost::thread(boost::bind(cilent_session, cli_socket)); } return 0; } void cilent_session(socket_Ptr socket) { while (true) { char data[1024]; //客户端主动断开,程序会抛异常,必须要抓取异常,不然程序挂掉。 try { //阻塞读取 size_t len = socket->read_some(buffer(data));
       if (0 == len) { std::cout << "客户端断开" << std::endl; return; } if (len > 0) { len = write(*socket, buffer("ok", 2)); if (len <= 0) { std::cout << "发送异常 断开连接" << std::endl; return; } } } catch (boost::system::system_error e) { std::cout << "抛出异常 :" << e.code() << std::endl; return; } } }

 

 

//客户端
#include <cstdio> #include <iostream> #include <sstream> #include <boost/asio.hpp> #include <boost/bind.hpp> #include <boost/thread/thread.hpp> using namespace boost::asio; typedef boost::shared_ptr<ip::tcp::socket> socket_Ptr; void cilent_session(socket_Ptr socket); int main() { //必须定义一个io_service实例,使用io_service与系统的输入输出进行交互 io_service service; ip::tcp::endpoint ep(ip::address::from_string("192.168.56.1"), 7200); //定义套接字 socket_Ptr socketPtr(new ip::tcp::socket(service)); //错误码 boost::system::error_code ec; // 连接服务器 socketPtr->connect(ep, ec); if (ec) { std::cout << boost::system::system_error(ec).what() << std::endl; return -1; } std::cout << "connect ..." << std::endl; //连接上服务,在线程中操作读写socket。 boost::thread(boost::bind(cilent_session, socketPtr)); while (true) { sleep(1000); } return 0; } void cilent_session(socket_Ptr socket) { while (true) { char data[1024] = { '\0' }; //客户端主动断开,程序会抛异常,必须要抓取异常,不然程序挂掉。 try { //阻塞读取 size_t len = socket->read_some(buffer(data)); std::cout << "recv len = " << len << std::endl; if (0 == len) { std::cout << "服务端断开" << std::endl; return; } if (len > 0) { len = write(*socket, buffer("ok", 2)); if (len <= 0) { std::cout << "发送异常 断开连接" << std::endl; return; } } } catch (boost::system::system_error e) { std::cout << "抛出异常 :" << e.code() << std::endl; return; } } }

 

posted @ 2021-03-20 15:55  osbreak  阅读(99)  评论(0编辑  收藏  举报