2011-07-11 11 views
5

Tôi đang cố tạo một ứng dụng khách HTTP bằng cách sử dụng Boost Asio. Tôi đã sao chép ví dụ ứng dụng khách đồng bộ hóa từ asio, biên dịch rồi chạy. Thật không may, trên nhật ký của tôi, nó cho thấy dịch vụ không tìm thấy. Khi tôi truy tìm mã, tôi thấy nó được ném từ mã sau đây:Boost Asio tcp :: resolver: không tìm thấy dịch vụ

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; 

Ai đó có thể giải thích lý do tại sao dịch vụ này không tìm thấy hoặc cách tôi có thể giải quyết vấn đề này?

Trả lời

6

Điều này có nghĩa là hệ điều hành không biết số cổng nào tương ứng với dịch vụ TCP có tên "http".

Trên hệ điều hành giống Unix, điều này có nghĩa là dòng http 80/tcp bị thiếu từ /etc/services, tôi có thể tạo lại lỗi trên Linux bằng cách nhận xét dòng đó.

Nếu hệ điều hành không thể được cấu hình để sử dụng dịch vụ, bạn có thể sử dụng bất kỳ dịch vụ "" trong resolver, và chỉ định số cổng một cách rõ ràng khi tạo đối tượng thiết bị đầu cuối cho cuộc gọi kết nối:

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

nhờ trả lời của bạn . Sẽ thử điều này khi tôi trở lại làm việc. Cảm ơn. – neztreh

+2

Bạn cũng có thể cung cấp số cổng dưới dạng một chuỗi, ví dụ: truy vấn ("host.com", "80") –