【发布时间】:2021-05-03 13:22:58
【问题描述】:
我正在尝试使用 boost::asio 实现 NAT 打孔。据我了解,NAT 打孔是这样工作的(UDP/TCP):
- 客户端 A 绑定到一个端口并连接到服务器 S,客户端 B 也这样做。
- 当S收到请求和匹配时,将A的ip和端口发送给B,B发送给A。
- A 和 B 收到对方的 ip 和端口,现在他们从同一个端口向对方发送消息并形成连接(因为他们正在等待回复?)
所以在 boost::asio 中,我能够完成步骤 1-2,但是由于两个客户端都没有端口转发,如果我尝试从一个客户端连接到另一个客户端,它只会给我类似的错误“客户端主动拒绝连接”或“客户端无响应”(令人惊讶的是,这两个客户端即使使用相同的功能也会出现不同的错误)。
如果没有成功的async_connect 或asio::tcp::socket::connect,我似乎无法运行任何asio::async_write。当然,当目标端口没有被转发时,这两个连接函数都会给我错误。
那么在这种情况下我该如何实现 NAT 打孔,我是否在 boost::asio 中遗漏了什么?任何帮助表示赞赏!谢谢。
【问题讨论】:
-
我建议您改进您的问题,添加一些示例,一些代码并使其更清晰,看看这里 => How to create a Minimal, Reproducible Example
-
嗨,我已经编辑了一些关于我正在使用的功能的更多信息。我可以知道您的问题中有哪些不清楚的地方吗?谢谢!
-
Sam,这个问题本身就很好,我的意思是如果你有一些代码可以分享更适合堆栈溢出指南。不幸的是,由于我不是 C++ 开发人员,因此我无法回答您的问题,但我知道 Stack Overflow 以及它的工作原理。您应该始终提供一些源代码,以便该领域的用户专家(在这种情况下为 C++)可以更好地帮助您,不仅您将获得更快的答案,而且还可以获得更高质量的答案,避免被否决甚至关闭问题是否不够清楚。只是一个建议
标签: c++ tcp boost-asio nat