receive_from - 提供了无效参数

时间:2015-06-02 06:49:04

标签: boost udp client windows-8.1 boost-asio

我已尝试使用升级文档(http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/tutorial/tutdaytime4/src.html)中的同步UDP客户端的示例代码,我只删除了发送'部分示例:

#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 个答案:

答案 0 :(得分:2)

您永远不会将套接字绑定到端点。你需要创建一个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