【问题标题】:receive_from - An invalid argument was suppliedreceive_from - 提供了一个无效的参数
【发布时间】:2023-03-09 00:23:01
【问题描述】:

我已经尝试使用来自 boost 文档 (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;
}

我没有对示例代码进行任何其他更改,我也没有发现它有任何问题,那么为什么会创建异常呢?我没有激活防火墙,它可能会阻止任何东西。

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 另请注意,发送 UDP 消息会自动为您绑定到端点,这可能是它与您剪切的“发送部分”一起使用的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多