gpt4 book ai didi

c++ - 在同一端口上发送和接收 UDP

转载 作者:行者123 更新时间:2023-11-28 04:30:25 25 4
gpt4 key购买 nike

我使用 X-Plane 并将其输出 UDP 数据发送到 127.0.0.1:49000。当我的应用程序应该监听同一个端口以通过 boost::asio 接收数据时,问题就出现了。

我在 here 使用了 boost 示例代码和 here .

// 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: An attempt was made to access a socket in a way forbidden by its access permissions

这是有道理的,因为 X-Plane 正在这个端口写入,而我从同一个端口读取。我们俩都占据同一个港口。有什么办法可以克服这个问题吗?如果不是,是否意味着计算机上的两个应用程序无法通过UDP 传输消息?

最佳答案

It make sense, because X-Plane is writing at this port and I read from the same port.

X-Plane 正在那个端口发送并接收那个端口。它会将数据报写入(并从中接收数据报)它必须与之交谈的程序正在接收和发送的任何端口。

Both of us are occupying the same port. Is there any way to overcome this problem?

是的,选择一个不同的端口发送和接收

If not, does it mean that two application at the computer cannot transfer message via UDP?

他们当然可以。通常,一方选择一个众所周知的端口作为发送和接收的端口。另一端使用随机端口发送和接收,发送到知名端口并从知名端口接收。

所以流程是:

  1. X-Plane 始终绑定(bind)到众所周知的端口 49,000。
  2. 您随机选择一个端口,例如 31,020。您绑定(bind)到该端口。
  3. 您将数据报从端口 31,020 发送到端口 49,000,因为这是 X-Plane 的知名端口。
  4. X-Plane 从端口 31,020 到端口 49,000(它绑定(bind)到的端口)接收数据报。 X-Plane 注意到数据报来自端口 31,020。
  5. X-Plane 将响应发送到端口 31,020,您的程序从端口 49,000 监听的端口,它绑定(bind)到并从中发送的端口。
  6. 您的程序从端口 49,000 到端口 31,020(它正在监听的端口)接收数据报。
  7. 您的程序知道这是来自 X-Plane 的响应,因为它来自端口 49,000。

关于c++ - 在同一端口上发送和接收 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53097190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com