Próbuję podłączyć dvr używając doładowania biblioteki asio w ios. Aplikacja działa dobrze w emulatorze z siecią ipv4. Ale kiedy przesłać aplikację na Appstore Apple odrzucił aplikację, ponieważ nie działa w sieci ipv6. I widzę na stronie Apple, że aplikacja powinna obsługiwać sieć ipv6. https://developer.apple.com/news/?id=05042016aIOS boost asio połączenie z sieci ipv6
Więc myślę, że problem pojawia się w sekcji, w której próbuję połączyć się z DVR za pomocą biblioteki boost, gdzie adres IP rejestratora jest wyciągany z DB (zakodowany na stałe), a poniżej znajduje się odpowiednia część kod.
boost::asio::io_service io_service_;
tcp::resolver::iterator endpoint_iter_;
tcp::resolver resolver_; //to healp resolving hostname and ip
stringstream strstream;//create a stringstream
strstream << port;//add number to the stream
endpoint_iter_ = resolver_.resolve(tcp::resolver::query(ip.c_str(),strstream.str()));
start_connect(endpoint_iter_);
// Start the deadline actor. You will note that we're not setting any
// particular deadline here. Instead, the connect and input actors will
// update the deadline prior to each asynchronous operation.
deadline_timer_.async_wait(boost::bind(&dvr_obj::check_deadline, this));
//starting thread for dvr connection
io_service_.reset();
thread_ = new boost::thread(boost::bind(&boost::asio::io_service::run, &io_service_));
metoda start_connect
void start_connect(tcp::resolver::iterator endpoint_iter)
{
try
{
if (endpoint_iter != tcp::resolver::iterator())
{
drill_debug_info("trying to connect %s \n",name.c_str());
// Set a deadline for the connect operation.
deadline_timer_.expires_from_now(boost::posix_time::seconds(10));
// Start the asynchronous connect operation.
socket_.async_connect(endpoint_iter->endpoint(),
boost::bind(&dvr_obj::handle_connect,
this, _1, endpoint_iter));
}
else
{
// There are no more endpoints to try. Shut down the client.
connectivity = false;
}
} catch (int e) {
connectivity = false;
}
}
Więc jestem zdezorientowany jak zmienić powyższy kod do pracy w sieci IPv6. Nie można znaleźć żadnego rozwiązania w Internecie.
'resolver_.resolve()' zwraca iterator do listy zgłoszeń. Twój kod używa tylko pierwszego wpisu. Możesz znaleźć wpis IPv6, jeśli przejrzysz listę ... – kenba
Dzięki za odpowiedź, możesz podać mi jakiś kod referencyjny. – CodeDezk