【发布时间】:2011-10-11 06:44:00
【问题描述】:
我正在尝试使用 Peer to Peer 将 Internet 上的网络添加到我的游戏中。 我已经实现了一个仅限 LAN 的版本,它使用 .NET 的点对点类在本地网络中进行连接。
我意识到我需要使用 UDP 打孔来建立与防火墙后面的其他客户端的连接。
这就是我开始实施它的方式: 该服务器是一个 HTTP 服务器,使用非常简单的 PHP 脚本来完成工作。
- 在服务器上注册名称,将私有 IP 地址和端口作为 GET 变量发送
- 服务器收到注册请求后,会保存公共端点和私有端点
- 请求连接到另一个客户端。
- 服务器将返回客户端的私有和公共端点
- 每两秒,第二个客户端将与服务器签入,如果有另一个客户端尝试与其连接,它也会获取其端点
- 两个客户端开始向对方的公共端点发送垃圾邮件,直到获得有效响应
现在我有一堆问题
- 服务器可以是 HTTP 服务器吗?
- 当我向 HTTP 服务器发出请求时,每次发出请求时客户端端口都会更改。私有端点是否始终与同一个公共端点匹配?
- 发往服务器的请求是否必须与发往客户端的 UDP 消息具有相同的源端点?
- 有没有办法在 C# 中使用指定的源端点连接到 HTTP 服务器?
- 我的实现有什么问题吗?
谢谢!
【问题讨论】:
-
.NET 的点对点类是什么?
-
System.net.P2P 命名空间 - 非常适合本地连接。
-
我使用了这样的解决方案并取得了一些成功。但不幸的是,答案的时机很糟糕。如果明天还没有解决,我会尽力说明我的观点。
标签: c# .net udp p2p hole-punching