2012-06-18 10 views
6

Ho provato a creare un client server con un protocolo di perforazione. Quindi invio al mio server il mio client IP e la porta del client, E quando un secondo utente è connesso, il server invia a entrambi i client l'Ip e la porta dell'altro client. Così, quando ho questo ho cercato di stabilire una connessione tra il mio client e ho un errore con boost :: asioPunzonatura con boost :: asio

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >' 

cosa(): Il servizio non ha trovato Interrotto

Ecco il mio codice

std::vector<std::string> response; 

response = split(reply, ':'); 
std::cout << "name : " << response[0] << std::endl; 
std::cout << "adresse : " << response[1] << std::endl; 
std::cout << "port : " << response[2] << std::endl; 

udp::resolver::query query(udp::v4(), response[0], response[1]); 

std::cout << "resolved - - - -" << std::endl; 

struct client *cl = new struct client(); 

cl->endpoint_iterator = resolver.resolve(query); 
// It Crash HERE 

cl->sender_endpoint = *endpoint_iterator; 
cl->name = response[0]; 
_clients.push_back(cl); 
+0

È necessario inviare un piccolo esempio che è compilabile che mostra il problema esatto. È difficile capire quale potrebbe essere il problema guardando gli estratti che hai postato. – Nim

risposta

1

controllare i parametri alla query.

Si sta rispondendo alla stampa [1] come indirizzo host e risposta [2] come porta. Ma stai costruendo il tuo oggetto query con risposta [0] come indirizzo host e risposta [1] come porta/servizio.

Sospetto che "Servizio non trovato interrotto" si riferisce al nome host che non assomiglia al numero di porta o al nome del servizio.

Vedi http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/reference/ip__basic_resolver_query/basic_resolver_query/overload4.html