2009-02-15 10 views
15

Tôi đang bắt đầu Boost.Asio và cố gắng đưa ra các ví dụ được đưa ra trên trang web chính thức.
here`s mã khách hàng:Không thể hiểu được các thông số để xây dựng tcp :: resolver :: query


using boost::asio::ip::tcp; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    try { 
     boost::asio::io_service io_service; 

     tcp::resolver resolver(io_service); 
     tcp::resolver::query query(argv[1], "daytime"); 
     tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
     tcp::resolver::iterator end; 

     tcp::socket socket(io_service); 
     boost::system::error_code error = boost::asio::error::host_not_found; 
     while(error && endpoint_iterator != end) { 
      socket.close(); 
      socket.connect(*endpoint_iterator++, error); 
     } 
     if (error) 
      throw boost::system::system_error(error); 

     for(;;) { 
      boost::array buf; 
      boost::system::error_code error; 

      std::size_t len = socket.read_some(boost::asio::buffer(buf), error); 

      if (error == boost::asio::error::eof) 
       break; //connection closed cleanly by peer 
      else if (error) 
       throw boost::system::system_error(error); 

      std::cout.write(buf.data(), len); 
     } 
    } 
    catch(std::exception& e) { 
     //... 
    } 
    return 0; 
} 

Câu hỏi đặt ra là - tôi không thể tìm ra những gì các thông số sẽ được chạy chương trình từ dấu nhắc lệnh?

Trả lời

12

Bạn sẽ chạy chương trình với các IP hoặc tên máy chủ của máy chủ bạn muốn kết nối tới. tcp :: resolver :: query nhận host để phân giải hoặc IP là tham số đầu tiên và tên của dịch vụ (như được định nghĩa trong/etc/services trên máy chủ Unix) - bạn cũng có thể sử dụng số nhận dạng dịch vụ (còn gọi là cổng) con số). Nó trả về một danh sách các điểm cuối có thể, vì có thể có một số mục nhập cho một máy chủ duy nhất.

+1

query tcp :: resolver :: truy vấn ("localhost", "ban ngày"); // nó hoạt động // Tôi muốn kiểm tra ví dụ trên localhost – chester89

1

Nếu tôi không nhầm lẫn, bạn đang cố gắng sử dụng chuỗi UNICODE - tchar. Sử dụng chuẩn

int main(int argc,char **argv) 
2

Tôi đã gặp sự cố tương tự ngay bây giờ (với cùng một hướng dẫn). Thay đổi mã máy chủ để:

tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 19876)); 

và thay đổi mã khách hàng:

tcp::resolver::query query(argv[1], "19876"); 

để làm cho công việc dịch vụ tương tự trên một cổng khác.