【发布时间】:2018-11-01 07:57:43
【问题描述】:
我使用X-Plane,它将其输出的UDP数据发送到127.0.0.1:49000。当我的应用程序应该通过boost::asio 侦听同一端口以接收数据时,问题就出现了。
// at main function:
udp_server server(49000);
// class implementation:
class udp_server
{
public:
udp_server(int port) :
io_service(),
socket_(io_service, udp::endpoint(udp::v4(), port)) // Exception occurs here
{
start_receive();
udp_thread = std::thread([this](){io_service.run();});
}
void start_receive()
{
socket_.async_receive_from(
boost::asio::buffer(recv_buffer_), remote_endpoint_,
boost::bind(&udp_server::handle_receive, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
// ...
std::thread udp_thread;
boost::asio::io_service io_service;
udp::socket socket_;
udp::endpoint remote_endpoint_;
boost::array<char, 5000> recv_buffer_;
};
当我运行代码时,我在套接字初始化时收到一个异常:
bind:试图以访问权限禁止的方式访问套接字
这是有道理的,因为X-Plane 正在此端口写入,而我从同一个端口读取。我们俩都占用同一个港口。有没有办法克服这个问题?如果不是,是否意味着电脑上的两个应用程序无法通过UDP传递消息?
【问题讨论】:
标签: c++ sockets boost boost-asio