2012-02-16 14 views
12

मैं boost::asio का उपयोग कर स्थानीय नेटवर्क में सभी कंप्यूटरों पर यूडीपी संदेशों को प्रसारित करना चाहता हूं। उदाहरण के माध्यम से कार्य करना मैंबूस्ट :: एएसओ यूडीपी प्रसारण

try { 
    socket.open(boost::asio::ip::udp::v4()); 
    boost::asio::socket_base::broadcast option(true); 
    socket.set_option(option); 
    endpoint = boost::asio::ip::udp::endpoint(
     boost::asio::ip::address::from_string("192.168.1.255"), 
     port); 
} 
catch(std::exception &e) { 
} 

के साथ आया था और

while(!queue.empty()) { 
    std::string message = queue.front(); 
    boost::system::error_code ignored_error; 
    socket.send_to(
     boost::asio::buffer(message), 
     endpoint, 
     0, ignored_error); 
    queue.pop_front(); 
} 

के साथ मेरे कतार से संदेश प्रसारित करना चाहते हैं, लेकिन मेरे कोड पहले कोड ब्लॉक में एक अपवाद invalid argument अपवाद फेंकता है। हालांकि यह 127.0.0.1 के लिए ठीक काम करता है। मैं क्या गलत कर रहा हूं?

उत्तर

22

ba::ip::address_v4::broadcast() कॉल का उपयोग कि समाप्ति बिंदु पाने के लिए एक यूडीपी प्रसारण भेजने के लिए निम्नलिखित कोड का टुकड़ा का प्रयास करें,:

bs::error_code error; 
    ba::ip::udp::socket socket(_impl->_ioService); 

    socket.open(ba::ip::udp::v4(), error); 
    if (!error) 
    { 
     socket.set_option(ba::ip::udp::socket::reuse_address(true)); 
     socket.set_option(ba::socket_base::broadcast(true)); 

     ba::ip::udp::endpoint senderEndpoint(ba::ip::address_v4::broadcast(), port);    

     socket.send_to(data, senderEndpoint); 
     socket.close(error); 
    } 
+1

निर्माण पूरी तरह से। धन्यवाद। – nijansen

+0

आप स्वयं को संदेश भेजने से कैसे बच सकते हैं? – yonutix

+2

@ योनुटिक्स नोप, यह सभी को संदेश भेजने के लिए प्रसारित करने का उद्देश्य है (और स्वयं इसमें शामिल है)। – MicroCheapFx