我使用a.publications.remove(p1, p4, p5) # remove three publications from a
,它将其输出UDP数据发送到X-Plane
。当我的应用程序应该侦听同一端口以通过127.0.0.1:49000
接收数据时,问题就会加剧。
boost::asio
运行代码时,我在套接字初始化时收到异常:
bind:尝试以其访问权限禁止的方式访问套接字
这是有道理的,因为// 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_;
};
正在此端口上写入,而我从同一端口读取。我们俩都占用同一个港口。有什么办法可以克服这个问题?如果不是,是否表示计算机上的两个应用程序无法通过X-Plane
传输消息?
答案 0 :(得分:1)
这是有道理的,因为X-Plane在此端口上进行写入,而我从同一端口进行读取。
X-Plane从该端口发送,并在该端口接收。它将把数据报写入到必须与之交谈的程序从其接收和发送的任何端口(并从该端口接收数据报)。
我们两个人都占用同一个端口。有什么办法可以解决这个问题?
是的,选择其他端口以从发送并在上接收。
如果不是,是否表示计算机上的两个应用程序无法通过UDP传输消息?
他们当然可以。通常,一侧会选择从其发送和接收的众所周知的端口。另一端使用它从已知端口发送和接收,到已知端口发送和从其接收的随机端口。
所以流程是: