2015-06-02 2 views
1

Я попытался использовать пример код для синхронного UDP клиента из документации повышающей (http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/tutorial/tutdaytime4/src.html), я удалил только «отправку» часть, например:receive_from - недопустимый аргумент был поставлен

#include <iostream> 
#include <boost/array.hpp> 
#include <boost/asio.hpp> 

using boost::asio::ip::udp; 

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

     udp::socket socket(io_service); 
     socket.open(udp::v4()); 

     boost::array<char, 128> recv_buf; 
     udp::endpoint sender_endpoint; 
     size_t len = socket.receive_from(
     boost::asio::buffer(recv_buf), sender_endpoint); // Causes the exception "An invalid argument was supplied". 

     std::cout.write(recv_buf.data(), len); 
    } 
    catch (std::exception& e) 
    { 
     std::cerr << e.what() << std::endl; 
    } 

    return 0; 
} 

Я еще не внес каких-либо изменений в код примера, и я не вижу в этом ничего плохого, так почему он создает исключение? У меня нет активного брандмауэра, который может блокировать что угодно.

ответ

1

Вы никогда не связывали свой сокет с конечной точкой. Вам нужно создать boost :: asio :: ip :: udp :: endpoint и привязать к нему свой сокет. Эта конечная точка представляет ip-адрес и порт, на который вы будете получать пакеты.

См. Документы: http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/reference/basic_datagram_socket/bind.html

Смежные вопросы