Я использую 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
?