• boost之网络通信


    ip::tcp的内部类型socket,acceptor以及resolver是TCP通信中最核心的类。

    1.同步客户端代码:

    #include <iostream>
    #include <boost/asio.hpp>
    #include <boost/asio/ip/address.hpp>
    using namespace std;
    using namespace boost::asio;
    
    using namespace boost;
    
    int main()
    {
    	io_service ios;
    	cout << "client start." <<endl;
    	ip::tcp::socket sock(ios);
    	ip::tcp::endpoint ep(ip::address::from_string("192.168.1.100"),6688);
    	sock.connect(ep);
    	vector<char> str(100,0);
    	sock.read_some(buffer(str));
    	cout << "recive from" << sock.remote_endpoint().address();
    	cout << &str[0] <<endl;
    	while(1);
    	return 0;
    }
    

     同步服务器端代码:

    #include <iostream>
    #include <boost/asio.hpp>
    #include <boost/asio/ip/address.hpp>
    using namespace std;
    using namespace boost::asio;
    
    using namespace boost;
    
    int main()
    {
    	io_service ios;
    	cout << "server start." <<endl;
    	//boost::asio::ip::tcp::acceptor acceptor(ios,boost::asio::ip:tcp::endpoint(boost::asio::ip::tcp::v4(),6688));
    	//
    	ip::tcp::acceptor acc(ios,ip::tcp::endpoint(ip::tcp::v4(),6688));
    	cout << acc.local_endpoint().address() <<endl;
    	while (true)
    	{
    		ip::tcp::socket sock(ios);
    		acc.accept(sock);
    		cout << sock.remote_endpoint().address() <<endl;
    		sock.write_some(buffer("hello asio"));
    	}
    	return 0;
    }
    

     2.异步服务器端代码,两个异步过程一个是接受连接异步处理->另外一个是写对象处理

    #include <iostream>
    #include <boost/asio.hpp>
    #include <boost/asio/ip/address.hpp>
    #include <boost/bind.hpp>
    using namespace std;
    using namespace boost::asio;
    
    using namespace boost;
    
    class server
    {
    private:
    	io_service& ios;//引用不能拷贝
    	ip::tcp::acceptor acceptor;
    	typedef shared_ptr<ip::tcp::socket> sock_pt;
    public:
    	server(io_service& io):ios(io),
    		acceptor(ios,ip::tcp::endpoint(ip::tcp::v4(),6688))
    	{
    		start();
    	}
    	void start()
    	{
    		sock_pt sock(new ip::tcp::socket(ios));
    		acceptor.async_accept(*sock,bind(&server::accept_handler,this,sock));
    	}
    	void accept_handler(sock_pt sock)
    	{
    		cout << "client:";
    		cout << sock->remote_endpoint().address() <<endl;
    		sock->async_write_some(buffer("hello asio"),bind(&server::write_handler,this));
    	}
    	void write_handler()
    	{
    		cout << "send msg complete." <<endl;
    	}
    };
    
    
    int main()
    {
    	io_service ios;
    	cout << "server start." <<endl;
    	server serv(ios);
    	ios.run();
    
    	return 0;
    }
    
  • 相关阅读:
    [Leetcode][Python][DP]Regular Expression Matching
    [LeetCode][Python]Container With Most Water
    [LeetCode][Python]Regular Expression Matching
    [LeetCode][Python]Palindrome Number
    [LeetCode][Python]Largest Number
    前后端数据交互的几个方法
    AngularJS中服务和自定义服务的常见方式及特点
    uniapp解决图形验证码问题及arraybuffer二进制转base64格式图片
    动态面包屑组件(适合嵌套路由)
    vue + antd-vue + 腾讯云点播 完成视频上传功能
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3256336.html
Copyright © 2020-2023  润新知