boost 监听端口服务器

第一种方式,较全面的方式
1,创建acceptor io
boost::asio::io_service io_serv;
boost::asio::ip::tcp::acceotpr acceotpr(io_serv);
acceotpr.open(io_serv, ip::tcp::v4());

2,设置端口复用
int on = 1;
setsockopt(acceotpr->native_handle(), SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on));
setsockopt(acceotpr->native_handle(), SOL_SOCKET, SO_REUSEPORT, (void *)&on, sizeof(on));
//或调用acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));

3,设置监听端口
{
//如果监听所有网卡端口号
boost::asio::ip::tcp::endpoint endpoint(ipc::tcp::v4(), port)
//如果监听ip+端口号
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address_v4::from_string(ip), port)
}

4,绑定端口
acceotpr.bind(endpoint);

5,监听
acceotpr.listen();

6,异步接收数据

start_accept()
{
boost::asio::ip::tcp::socket *psock = new boost::asio::ip::tcp::socket(io_serv)
acceotpr.async_accept(sock, boost::bind(handle_accept, this, (void *)psock, _1)); //绑定接收函数
}

7,数据处理
handle_accept(void *psock, const boost::system::error_code &error)
{
if(error)
return ;

std::ostringstream local = psock->local_endpoint().address();
std::string local_str = local.str();

std::ostringstream remote = psock->remote_endpoint().address();
std::string remote_str = remote.str();

start_accept();

}

8,执行回调使用
io_serv.run();

第二种方式,简单方式
boost::asio::io_service io_serv;
boost::asio::ip::tcp::acceotpr acceotpr(io_serv, tcp::endpoint(tcp::v4(), port))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值