2009-02-15 16 views
15

बनाने के लिए पैरामीटर क्या हैं I Boost.Asio शुरू कर रहे हैं और आधिकारिक वेबसाइट के काम पर उदाहरण देने की कोशिश कर रहे हैं।
यहाँ 'ग्राहक कोड:वास्तव में समझ नहीं सकता कि tcp :: resolver :: क्वेरी


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; 
} 

सवाल है - मैं बाहर नहीं मिल सकता है मापदंडों कमांड प्रॉम्प्ट से कार्यक्रम चलाने के लिए होगा क्या?

उत्तर

12

आप आईपी या सर्वर से कनेक्ट करना चाहते हैं होस्टनाम के साथ कार्यक्रम चलाए जा सकें। tcp :: resolver :: क्वेरी होस्ट को हल करने के लिए या आईपी को पहले पैरामीटर और सेवा का नाम (जैसा कि परिभाषित किया गया है जैसे यूनिक्स होस्ट पर/etc/सेवाओं में) - आप एक संख्यात्मक सेवा पहचानकर्ता (उर्फ पोर्ट संख्या)। यह संभावित अंतराल की एक सूची देता है, क्योंकि एक मेजबान के लिए कई प्रविष्टियां हो सकती हैं।

+1

टीसीपी :: समाधानकर्ता :: क्वेरी क्वेरी ("स्थानीय होस्ट", "दिन"); // यह // // मैं स्थानीयहोस्ट पर उदाहरण का परीक्षण करना चाहता था – chester89

1

यदि मुझे गलती नहीं है, तो आप UNICODE स्ट्रिंग - tchar का उपयोग करने का प्रयास कर रहे हैं। का प्रयोग करें मानक

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

मुझे अभी भी वही समस्या थी (उसी ट्यूटोरियल के साथ)। करने के लिए सर्वर कोड बदलें:

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

और ग्राहक कोड बदलने के लिए:

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

एक अलग बंदरगाह पर एक ही सेवा के काम करने के।

5

पुराना मैनुअल पढ़ें!

ip::tcp::resolver resolver(my_io_service); 
ip::tcp::resolver::query query("www.boost.org", "http"); 
ip::tcp::resolver::iterator iter = resolver.resolve(query); 
ip::tcp::resolver::iterator end; // End marker. 
while (iter != end) 
{ 
    ip::tcp::endpoint endpoint = *iter++; 
    std::cout << endpoint << std::endl; 
} 

http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio/overview/networking/protocols.html

संबंधित मुद्दे