0
我有一个UDP服务器设置与升压/ ASIO(我复制the example,只是改变了一些东西)。下面是代码:操作取消升压asio async_receive_from
udp_server.hpp
using boost::asio::ip::udp;
class udp_server {
public:
udp_server(boost::asio::io_service&, int);
private:
boost::array<char, 256> recBuffer;
udp::socket socket_;
udp::endpoint remote_endpoint_;
void start_receive();
void handle_receive(const boost::system::error_code&, std::size_t);
void handle_send(boost::shared_ptr<std::string> /*message*/,
const boost::system::error_code& /*error*/,
std::size_t /*bytes_transferred*/)
{}
};
和udp_server.cpp
udp_server::udp_server(boost::asio::io_service& io_service,
int port)
: socket_(io_service, udp::endpoint(udp::v4(), port)) {
serverNotifications.push_back("UDP Server class initialized.");
start_receive();
}
void udp_server::start_receive() {
socket_.async_receive_from(
boost::asio::buffer(recBuffer),
remote_endpoint_,
boost::bind(&udp_server::handle_receive,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
serverNotifications.push_back("Starting to receive UDP Messages.");
}
void udp_server::handle_receive(const boost::system::error_code& error,
std::size_t size) {
serverNotifications.push_back("RecFrom: " + remote_endpoint_.address().to_string());
if (!error) {
// I do data stuff here
} else {
errors.push_back("Handle Receive error: " + error.message());
}
}
与初始化服务器后:
try {
udp_server server(io_service, ApplData.PORT, (size_t)ApplData.BUFLEN);
} catch (std::exception& e) {
// error handling
}
并运行它w ^第i个在其他功能的单独尝试捕捉io_service.run()
我得到了一些问题:
- 我的回调函数
handle_receive
被称为无任何UDP消息让整个网络中发送(又名只是我的笔记本电脑没有连接)error.message()
返回 “操作取消”remote_endpoint_.address().to_string()
返回 “ACFC:4000:0:0:7800 ::%2885986016”,而我不能确定的东西有用
- 另外,我认识到我的
io_service
一直在停止,但根据我的理解,它应该始终运行,对吧?
我已经想过在回调函数绑定在shared_from_this ptr
引用这一点,但因为我有udp_server
类的实例实,直到我离开我的计划,我不能想到一个很好的理由这样做。
有人可以解释你的这种失败发生,这些错误告诉我关于我的代码或我能做些什么来避免它们?