나는 boost/asio로 설정된 UDP 서버를 가지고 있습니다 (나는 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
- 내 콜백 함수
handle_receive
- (연결없이 일명 단지 내 노트북)를 전체 네트워크에 보내지고있는 UDP 메시지없이 호출됩니다 : i 번째 다른 함수에서 별도의 시도 캐치에
io_service.run()
나는 몇 가지 문제를 얻을 수error.message()
반환 remote_endpoint_.address().to_string()
반환을 "작업 취소" "acfc : 4000 : 0 : 0 : 7800 : % 2885986016"나는 유용한 무언가로 식별 할 수
- (연결없이 일명 단지 내 노트북)를 전체 네트워크에 보내지고있는 UDP 메시지없이 호출됩니다 : i 번째 다른 함수에서 별도의 시도 캐치에
- 또한 내
io_service
이 항상 멈추고 있다는 것을 알았지 만, 내 이해에서 항상 실행해야합니다.
나는 이미 shared_from_this ptr
와 콜백 함수 바인딩이 참조하는 생각,하지만 난 내 프로그램을 떠날 때까지 나는 udp_server
클래스의 실제 인스턴스를 갖고 있기 때문에 나는 그것을 할 수있는 좋은 이유를 생각할 수 없다.
누군가이 오류가 발생했음을 설명 할 수 있습니까?이 오류가 내 코드에 대해 알려주거나 피할 수있는 방법을 설명 할 수 있습니까?