2009-02-15 21 views
15

için parametrelerin ne anlama geldiğini anlayamıyorum Boost.Asio başlatıyorum ve resmi web sitesi çalışmalarında verilen örnekleri yapmaya çalışıyorum.
Here`s istemci kodu:Gerçekten 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; 
} 

soru - Ben parametreleri komut isteminden programını çalıştırmak için ne olacağını bulamıyorum?

cevap

12

kullanın. tcp :: resolver :: query, ana parametreyi çözümlemek veya IP'yi ilk parametre olarak ve hizmetin adını (Unix ana bilgisayarlarında/etc/services içinde tanımlandığı gibi) alır - ayrıca sayısal bir hizmet tanımlayıcısı (aka bağlantı noktası) kullanabilirsiniz numara). Tek bir ana bilgisayar için çeşitli girişler olabileceğinden, olası son noktaların bir listesini döndürür.

+1

TCP :: çözümleyici :: sorgusu sorgu ("localhost", "gündüz"); // çalışır // Ben localhost örneğini test etmek istedim – chester89

1

Eğer hata yapmazsam UNICODE string - tchar kullanmaya çalışıyorsunuz. Sen bağlanmak istediğiniz sunucunun IP veya Hostname ile programı aday olacağını standart

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

Şu anda aynı sorunu yaşadım (aynı ders ile). Sunucu kodunu değiştirin:

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

ve istemci kodunu değiştirmek:

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

farklı bir bağlantı noktasında aynı hizmet iş yapmak için.