UDP打洞帮助

2023-12-19

我正在尝试使用点对点将互联网网络添加到我的游戏中。 我已经实现了仅 LAN 版本,它使用 .NET 的对等类在本地网络内进行连接。

我意识到我需要使用 UDP 打洞来建立与防火墙后面的其他客户端的连接。

这就是我开始实施它的方式: 该服务器是一个 HTTP 服务器,使用非常简单的 PHP 脚本来完成工作。

    • 在服务器上注册名称,将私有 IP 地址和端口作为 GET 变量发送
    • 当服务器收到注册请求时,会保存公共端点和私有端点
    • 请求连接到另一个客户端。
    • 服务器将返回客户端的私有和公共端点
    • 每两秒,第二个客户端将与服务器进行检查,如果有另一个客户端尝试与其连接,它也会获取其端点
    • 两个客户端开始向彼此的公共端点发送垃圾邮件,直到获得有效响应

现在我有很多问题

  1. 服务器可以是 HTTP 服务器吗?
  2. 当我向 HTTP 服务器发出请求时,每次发出请求时客户端端口都会发生变化。专用端点是否始终与同一个公共端点匹配?
  3. 对服务器的请求是否必须与对客户端的 UDP 消息具有相同的源端点?
  4. 有没有办法使用指定的源端点连接到 C# 中的 HTTP 服务器?
  5. 我的实现有什么问题吗?

Thanks!


UDP 打洞是一个复杂的主题,人们已经进行了许多尝试来寻找有效的解决方案。问题在于,有很多不同的 NAT 路由器,并且没有实现 NAT 的标准方法,因此所有路由器的行为都有些不同。

一些尝试已经标准化,例如STUN https://www.rfc-editor.org/rfc/rfc3489, ICE https://www.rfc-editor.org/rfc/rfc5245。它们仍然只在大多数情况下起作用,而不是全部,但它们积累了大量的知识并解决了许多问题——比您的尝试所能做到的还要多,仅仅是因为您无法用世界上的每个 NAT 路由器来测试您的解决方案。例如,Skype花费了数年时间来完善其NAT穿越机制。

我推荐你看一下STUN或者最好是ICE。尝试实现其中之一或寻找现有的实现。

另一种选择可能是简单地在路由器上创建一个端口转发,例如使用UPnP or NAT-PMP.

也就是说,如果 .NET 对等类带有 NAT 遍历机制,我不会感到惊讶,但我对它们并不熟悉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UDP打洞帮助 的相关文章

随机推荐

  • 计算两个用户之间的社交距离

    如何编写一个有效的算法来返回两个用户之间的社交 距离 例如 当您访问 LinkedIn 上的个人资料时 您可以看到您与用户之间的距离 gt 用户 A 是用户 B 的朋友 并且 B 是 C 的朋友 当 A 访问 C 时 距离为 1 该图很大
  • 为什么使用客户端凭证流程?

    我一直在考虑使用 oauth2 客户端凭据授予来保护我的 API 所有用户都将是受信任的第三方 我在这里遵循与贝宝相同的方法 https developer paypal com docs integration direct paypal
  • 有没有一种聪明的方法来编写固定长度的平面文件?

    有没有任何框架 库可以帮助用java编写固定长度的平面文件 我想将 bean 实体的集合写入平面文件 而不用担心转换 填充 对齐 填充符等 例如 我想解析一个 bean 如下所示 public class Entity String nam
  • MySQL 错误:排序中止

    我在 Windows 2008 上有 MySQL 5 1 内存为 8G 该错误在事件查看器上每两秒发生一次 错误是 D SW MySQL MySQL server 5 1 bin mysqld 排序已中止 有人看到这个错误吗 至少有一些已知
  • Rx - 如何在收到 onNext() 后自动取消订阅?

    如何在收到 onNext 后自动取消订阅 现在我使用这段代码 rxObservable compose bindToLifecycle unsubscribe automatically in onPause if method was c
  • 设置 Android 中动态添加的 EditText 的属性

    我正在开发一个 Android 应用程序 它下载 xml 并显示一个布局 其中包含许多动态添加的编辑文本 复选框 旋转器等 如下所示 LinearLayout ll new LinearLayout this EditText nameFi
  • Vim 正则表达式不匹配字符类中的空格

    我正在使用 vim 进行搜索并用以下命令替换 s lambda s n s S gc 我正在尝试匹配 a 之后的所有单词 结束行和空白字符 例如 这一行的整个内容应该匹配 lambda FactoryGirl create 相反 它只匹配换
  • 使用通配符对多个值进行模式匹配

    在 Kotlin 中 我们可以使用when对给定值进行模式匹配 例如 when value 1 gt One 2 3 gt Two or three else gt The rest 我们还可以通过将两个值嵌套在一个中来同时对多个值进行模式
  • webMethods 遍历文档列表

    我正在创建一个流程服务 并在其中插入另一个流程 该流程将文档列表作为输出并包含 5 个字符串字段 问题是我无法循环该文档列表 无论我在输入数组 getPropertyOutput getPropertyOutput 0 中放入什么 都会被忽
  • 如果validation_data ValueError:具有多个元素的数组的真值不明确,则在 model.fit() 中引发错误。使用 a.any() 或 a.all()

    我正在尝试运行一个简单的自动编码器模型 我正在从包含词嵌入的 csv 中读取训练数据 我有这段代码 但标题中的错误是在model fit 功能并与我的连接validation data 我尝试了很多方法 但错误仍然存 在 我是 NLP 的新
  • Rake“已初始化常量 WFKV_”警告

    尝试跑步rake cucumber ok并收到此错误 Users dev rbenv versions 1 9 2 p290 lib ruby gems 1 9 1 gems rack 1 3 4 lib rack backports ur
  • 将 :host-context() 与相邻同级选择器一起使用

    我正在尝试使用 host context 和相邻的同级选择器来设置元素的样式 如下所示
  • 严格的别名规则是什么?

    当询问有关C 中常见的未定义行为 https stackoverflow com questions 98340 what are the common undefinedunspecified behavior for c that yo
  • Java8 从类中检索 lambda setter

    我试图为私有字段的 setter 获取 lambda 方法句柄 但由于某种原因 无法找到该 setter 这是我正在使用的功能接口 FunctionalInterface public interface ISetter
  • 强制执行有界 Nat?

    我怎样才能强制执行Nat that s lt N Example def lessThan5 x NatLT5 where lessThan5 Nat 4 会编译 但是lessThan5 Nat 6 不会 您可以使用类型类LTEq http
  • 错误:(gcloud.app.deploy)INVALID_ARGUMENT:无法解析源

    我正在尝试部署一个go 1 11运行时曾经有效 但最近我得到了 ERROR gcloud app deploy INVALID ARGUMENT unable to resolve source错误 我的里面什么也没有app yaml已更改
  • python中强度函数的积分

    有一个函数可以确定圆形孔径的夫琅和费衍射图案的强度 更多信息 http en wikipedia org wiki Airy Disk 距离 x 3 8317 3 8317 中函数的积分必须约为 83 8 如果假设 I0 为 100 当您将
  • 如何向作为组存储在 HDF5 文件中的 pandas 数据帧添加属性?

    我创建了一个多维 pandas 数据框 如下所示 import numpy as np import pandas as pd iterables bar baz foo qux one two mindex pd MultiIndex f
  • 值得使用 sqlalchemy-migrate 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个使用 sqlalchemy 的 Web 应用程序 在 Pylons 内 我需要有效地更改架构 以便能够至少每天 甚至更多 更改生产版本
  • UDP打洞帮助

    我正在尝试使用点对点将互联网网络添加到我的游戏中 我已经实现了仅 LAN 版本 它使用 NET 的对等类在本地网络内进行连接 我意识到我需要使用 UDP 打洞来建立与防火墙后面的其他客户端的连接 这就是我开始实施它的方式 该服务器是一个 H