2011-07-11 15 views
5

Próbuję utworzyć klienta HTTP za pomocą funkcji Boost Asio. Skopiowałem przykład klienta synchronizacji z asio, skompilowałem, a następnie uruchomiłem. Niestety na moich logach pokazuje nie znaleziono usługi. Kiedy prześledzić kod, znalazłem go, że jest on wyrzucony z następującego kodu:Zwiększ Asio tcp :: resolver: usługa nie została znaleziona

boost::asio::io_service io_service; 
// Get a list of endpoints corresponding to the server name. 
tcp::resolver resolver(io_service); 
//->if i removed the http, it has no error 
tcp::resolver::query query("host.com", "http"); 
//->This part throws the service not found 
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
tcp::resolver::iterator end; 

Czy ktoś może wyjaśnić, dlaczego to jest rzucanie usługa nie znaleziono ani w jaki sposób mogę rozwiązać ten problem?

Odpowiedz

6

Oznacza to, że system operacyjny nie wie, który numer portu odpowiada usłudze TCP o nazwie "http".

W systemie podobnym do systemu Unix oznaczałoby to, że http 80/tcp brakuje linii /etc/services, jestem w stanie odtworzyć błąd w systemie Linux, komentując ten wiersz.

Jeśli system operacyjny nie może być skonfigurowany do korzystania z usług, można użyć dowolną usługę "" w rezolwerem i określić numer portu wyraźnie podczas tworzenia obiektu punktu końcowego dla connect rozmowy:

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80); 
boost::system::error_code ec; 
socket.connect(connectionEndpoint, ec); 
+0

dzięki za odpowiedzi . Wypróbuję to, kiedy wrócę do pracy. Dzięki. – neztreh

+2

Można również podać numer portu jako ciąg, np. zapytanie ("host.com", "80") –

Powiązane problemy