6

这个主题类似于这个线程

我对网络编程这个话题相当陌生,除了在一台本地机器上做基本的 TCP/UDP 之外,从来没有做过任何事情。现在我正在开发一个需要 P2P 网络支持的应用程序。更具体地说,我需要应用程序通过 Internet 连接和通信,最好不使用服务器在客户端之间进行匹配。

我知道并假设几乎所有用户都在路由器后面,这使过程复杂化,因为两个客户端都无法初始化与另一个客户端的直接连接。

我知道 UPnP 是一个允许端口转发的选项,而无需用户手动配置,但到目前为止这不是一个选项。他们有什么方法可以实现我的目标,还是我需要那台服务器?

4

5 回答 5

6

您需要一台服务器来交换 IP 地址等。正如另一个线程从字面上指出的那样,保证连接的唯一方法是通过服务器进行代理。大多数点对点系统在大多数情况下使用UPnPNAT 打孔(这种方法需要服务器中继端口信息并且仅适用于 UDP)来建立连接。

NAT 打孔通过两个客户端建立与服务器的连接来工作,然后两者都尝试直接连接到另一个已中继到另一个的端口。大多数 UDP NAT 会在短时间内记住 IP 地址和端口,因此尽管数据从未到达另一端(这与 UDP 无关),但其他客户端稍后会尝试连接到该报告作为 NAT会期待回复。

于 2009-07-26T01:18:00.323 回答
6

RFC 5128,“跨网络地址转换器 (NAT) 的点对点 (P2P) 通信状态”,专为您准备的一本非常好的读物 :-) 。

于 2009-07-30T08:19:12.493 回答
3

使用 WCF 查看 P2P 通道:http: //msdn.microsoft.com/en-us/library/cc297274.aspx

它工作得很好。

于 2009-07-26T01:05:04.693 回答
2

忽略 UPnP(不幸的是,它只适用于某些路由器)和没有中央服务器,我不确定当两个用户都在 NAT 后面时是否可以创建直接连接。

于 2009-07-26T01:02:58.190 回答
1

好吧,为了避免服务器“匹配”,你可以做 Skype 所做的事情,并设置一些对等点作为中继到 NAT 后面的其他点。您将始终需要某种引导机制,因此中央服务器可能会以某种方式进入您的系统(当然取决于您的开发内容)。

于 2009-07-26T01:34:04.547 回答