2

我一直在寻找一个简单的 UDP C++ 库,它提供了一段时间的可靠性。我刚刚遇到 ENet,它看起来很完美,只是我在文档中找不到任何对 NAT 打孔的支持。互联网上似乎有一些人在讨论这个问题,但我还没有找到是否可能的明确答案。

我已经有一个第三方服务器,它被配置为向客户端分发外部 ips 和端口。

如果可能的话,有人可以提供一些描述该过程的伪代码/步骤吗?

4

3 回答 3

4

我想通了。这是我所做的:

  1. 为当前客户端创建主机
  2. 连接到第三方服务器
  3. 当另一个客户端连接到第 3 方服务器时,它会将其他客户端信息发送给每个客户端
  4. 在接收到对等点地址后,每个对等点尝试在用于连接到服务器的同一套接字上与另一个对等点建立连接,并开始向该地址发送数据包。这最初是我的问题。我只发送了几个数据包,它们很容易丢失。连接只能工作一半的时间。我最终生成了一个发送数据包的线程,直到连接成功或失败。
  5. 应在发送几个数据包后建立连接
于 2014-07-15T18:31:04.987 回答
2

使用STUN进行打孔,然后使用ENet
与 STUN-Server 通信并检索公共端点NAT 类型。确保 NAT 类型是打开的,然后继续 =>在用于与 STUN-Server 通信的套接字上使用getsockname ,以获取本地端点,然后关闭该套接字。
现在创建 ENet 服务器并使用本地端点对其进行初始化。现在,来自其他计算机的 ENet 客户端可以使用公共端点连接到服务器。

于 2018-04-05T20:32:26.317 回答
-1

UDP 可能会丢弃数据包,并且可能会乱序发送数据包。订购数据包是微不足道的。但是,如果一个数据包被丢弃,就无法恢复它。但是,许多使用 UDP 的系统会为您提供另一个具有重复数据的流。在这种情况下,您可以简单地使用辅助流创建备份,然后更新检查在第一个流中丢弃的数据包在第二个流中是否可用。

于 2014-07-08T15:08:33.207 回答