receive_from - 提供了无效参数
receive_from - An invalid argument was supplied
我尝试使用 boost 文档 (http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/tutorial/tutdaytime4/src.html) 中同步 UDP 客户端的示例代码,我只删除了示例的 'sending' 部分:
#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::asio::ip::udp::endpoint 并将套接字绑定到它。此端点表示您将在其上接收数据包的 IP 地址和端口。
在此处查看文档:
http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/reference/basic_datagram_socket/bind.html
我尝试使用 boost 文档 (http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/tutorial/tutdaytime4/src.html) 中同步 UDP 客户端的示例代码,我只删除了示例的 'sending' 部分:
#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::asio::ip::udp::endpoint 并将套接字绑定到它。此端点表示您将在其上接收数据包的 IP 地址和端口。
在此处查看文档: http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/reference/basic_datagram_socket/bind.html