我想向我的游戏添加基于Peer to Peer的网络连接,包括互联网。我已经实现了仅限于 LAN 的版本,使用.NET的点对点类在本地网络内部进行连接。
我意识到需要使用UDP洞穴技术才能与防火墙后面的其他客户端建立连接。
这是我开始实现它的方式: 服务器是一个HTTP服务器,使用非常简单的PHP脚本完成工作。
1. 在服务器上注册名称,并将私有IP地址和端口作为GET变量发送。 2. 当服务器收到注册请求时,它将保存公共端点和私有端点。 3. 请求连接到另一个客户端。 4. 服务器将返回客户端的私有和公共端点。 5. 每隔两秒钟,第二个客户端将向服务器检查一次,并且如果有另一个客户端试图连接它,它也会得到该客户端的端点。 6. 两个客户端开始不断发送彼此的公共端点,直到他们得到有效响应。
现在我有一些问题:
1. 服务器可以是HTTP服务器吗? 2. 当我向HTTP服务器发出请求时,每次请求时客户端端口都会改变。是否总是将私有端点与同一公共端点匹配? 3. 请求服务器必须具有与发送到客户端的UDP消息相同的源端点吗? 4. 是否有一种方法可以使用指定的源端点在C#中连接到HTTP服务器? 5. 是否存在问题在我的实现中?
谢谢!
我意识到需要使用UDP洞穴技术才能与防火墙后面的其他客户端建立连接。
这是我开始实现它的方式: 服务器是一个HTTP服务器,使用非常简单的PHP脚本完成工作。
1. 在服务器上注册名称,并将私有IP地址和端口作为GET变量发送。 2. 当服务器收到注册请求时,它将保存公共端点和私有端点。 3. 请求连接到另一个客户端。 4. 服务器将返回客户端的私有和公共端点。 5. 每隔两秒钟,第二个客户端将向服务器检查一次,并且如果有另一个客户端试图连接它,它也会得到该客户端的端点。 6. 两个客户端开始不断发送彼此的公共端点,直到他们得到有效响应。
现在我有一些问题:
1. 服务器可以是HTTP服务器吗? 2. 当我向HTTP服务器发出请求时,每次请求时客户端端口都会改变。是否总是将私有端点与同一公共端点匹配? 3. 请求服务器必须具有与发送到客户端的UDP消息相同的源端点吗? 4. 是否有一种方法可以使用指定的源端点在C#中连接到HTTP服务器? 5. 是否存在问题在我的实现中?
谢谢!