c++ - Send UDP packet to a public IP using Boost.asio -
i want send udp packets static ip 122.***.***.***
udp server listens on port 1213.
udp::resolver resolver(io_servicesend); udp::resolver::query query(udp::v4(),"122.***.***.***","1213"); udp::endpoint receiver_endpoint = *resolver.resolve(query); udp::socket socket(io_servicesend); socket.open(udp::v4()); boost::shared_ptr<std::string> message(new std::string("transfer")); socket.send_to(boost::asio::buffer(*message), receiver_endpoint);
but fails. because sending private port rather sending nat's port. tcp works perfectly. can 1 explain me theory or post link.
and server code is
udptunnel::udptunnel(boost::asio::io_service& io_service) :socket_(io_service, udp::endpoint(udp::v4(), 1213)) { start_receive(); } void udptunnel::start_receive() { socket_.async_receive_from( boost::asio::buffer(recv_buffer_), remote_endpoint_, boost::bind(&udptunnel::handle_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); cout << "\nudp started listening"; } void udptunnel::handle_receive(const boost::system::error_code& error,std::size_t) { cout << "\nudp recieved message"; if (!error || error == boost::asio::error::message_size) { cout << "\nrecieved message"; }
}
Comments
Post a Comment