需要boost的例子:asio异步服务器与接收器和接收器
need example of boost:asio async server with receiver and acceptor
我已经看了很多好的例子,但我没有找到如果有人可以帮助请帮助我,这是我现在的班
#include "StdAfx.h"
#include "TNetwork.h"
//-----------------------------------------------------------------------------------------------------------------------
CNetwork::CNetwork(io_service & io_service) : m_IoService(io_service), m_Acceptor(new ip::tcp::acceptor(io_service))
{
m_AcceptMutex.initialize();
}
//-----------------------------------------------------------------------------------------------------------------------
void CNetwork::setConnector(void (*THISFUNC) (int))
{
m_Connector = THISFUNC;
}
//-----------------------------------------------------------------------------------------------------------------------
void CNetwork::setReceiver(void (*THISFUNC) (int, u_char * , int))
{
m_Receiver = THISFUNC;
}
//-----------------------------------------------------------------------------------------------------------------------
void CNetwork::setDisconnector(void (*THISFUNC) (int))
{
m_Disconnector = THISFUNC;
}
//-----------------------------------------------------------------------------------------------------------------------
bool CNetwork::start(USHORT Port)
{
DWORD dwStartTick = GetTickCount();
// ----
printf("[%s][Starting ...]n", __FUNCTION__);
// ----
ip::tcp::endpoint selfpoint(ip::tcp::v4(), Port);
// ----
m_Acceptor->open(selfpoint.protocol());
m_Socket = new ip::tcp::socket(m_IoService);
// ----
try
{
m_Acceptor->bind(selfpoint);
m_Acceptor->listen();
}
catch(std::exception & e)
{
printf("[%s][%s]n", __FUNCTION__, e.what());
// ----
return false;
}
// ----
printf("[%s][Started OK , within %u milisecond(s)]n", __FUNCTION__, (GetTickCount() - dwStartTick));
// ----
ip::tcp::socket * temp = new ip::tcp::socket(m_IoService);
m_Acceptor->async_accept( * temp, boost::bind(& CNetwork::acceptor, this, temp, boost::asio::placeholders::error));
// ----
return true;
}
//-----------------------------------------------------------------------------------------------------------------------
void CNetwork::acceptor(ip::tcp::socket * socket, const boost::system::error_code & error)
{
if(error <= 0)
{
m_AcceptMutex.lock();
// ----
printf("[%s][New connection : %d.]n", __FUNCTION__, m_Clients.size());
m_Clients.push_back(socket);
// ----
if(m_Connector != NULL)
{
m_Connector(m_Clients.size());
}
// ----
m_AcceptMutex.unlock();
// ----
//socket->async_receive(boost::asio::buffer(m_buffers),
}
else
{
printf("[%s][%s]n", __FUNCTION__, error.message());
}
// ----
ip::tcp::socket * temp = new ip::tcp::socket(m_IoService);
// ----
// ----
m_Acceptor->async_accept( * temp, boost::bind(& CNetwork::acceptor, this, temp, boost::asio::placeholders::error));
}
//-----------------------------------------------------------------------------------------------------------------------
但我不知道如何接收以及我将如何发送到所有客户列表
有人有好的例子请分享一下,或者请告诉我如何用boost继续我的新课程
我不知道如何接收?
使用async_read() free函数
和我将如何做发送到所有客户名单?
遍历m_Clients
容器并在每个socket
上调用async_write()。
不相关,但不要这样做
m_AcceptMutex.lock();
// ...
m_AcceptMutex.unlock();
这样做容易出错,而且不安全。在这里使用RAII来解锁析构函数中的互斥锁。您已经使用了boost,所以使用boost::mutex::scoped_lock
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在C++中实现带有packaged_task的异步等待循环?
- 创建 Spdlog 异步文件记录器时遇到困难
- C ++异步键盘输入(标准方式)
- 在 gtkmm 中异步加载图像
- 带有 Boost.Beast 的异步读取标头
- 如何在 c++ 中异步调用静态方法?
- libcurl :C++处理多个异步请求
- 如何在C++上启动异步线程
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 增强 ASIO 和串行端口异步读取
- 使用 Qt5 SQL 进行异步数据库访问的策略
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- C++中真正的异步文件 IO
- 提升::Asio 异步聊天客户端停止与服务器通信
- 在 c++ 托管和异步运行中调用 c# 可执行文件
- std::异步与非静态成员函数
- 需要boost的例子:asio异步服务器与接收器和接收器
- Boost ASIO异步接收器不打开侦听端口
- 如何在使用Boost.Log时停止所有异步接收器