代码之家  ›  专栏  ›  技术社区  ›  Kasper Holdum

直接P2P连接

  •  4
  • Kasper Holdum  · 技术社区  · 15 年前

    这个主题类似 this thread

    我对网络编程这个话题还比较陌生,除了在一台本地机器上执行基本的TCP/UDP之外,我什么都没做过。现在我正在开发一个需要P2P网络支持的应用程序。更具体地说,我需要应用程序在互联网上连接和通信,最好不使用服务器在客户机之间进行匹配。

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

    我知道UPNP是一个允许端口转发而不需要用户手动配置的选项,但从现在起这不是一个选项。他们有没有办法达到我的目标,或者我需要那个服务器?

    5 回复  |  直到 15 年前
        1
  •  5
  •   ewanm89    15 年前

    您需要一个服务器来交换IP地址等。正如另一个线程逐字指出的那样,保证连接的唯一方法是通过服务器代理。大多数对等系统使用 UPnP Nat打孔 (此方法需要服务器中继端口信息,并且只与UDP一起工作)在大多数情况下建立连接。

    Nat打孔 两个客户端都建立到服务器的连接,然后两个客户端都尝试直接连接到另一个客户端中继到另一个服务器的端口。大多数udp-nat都会在短时间内记住IP地址和端口,因此尽管数据从未到达另一端(这与udp无关),但另一个客户端会在几分钟后尝试连接到该报告,因为nat会期望得到答复。

        2
  •  6
  •   bortzmeyer    15 年前
        3
  •  3
  •   codekaizen    15 年前

    通过wcf查看p2p频道: http://msdn.microsoft.com/en-us/library/cc297274.aspx

    它工作得很好。

        4
  •  2
  •   Kitsune SpiderShlong    15 年前

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

        5
  •  1
  •   Junier    15 年前

    为了避免服务器“matchmake”,你可以像skype那样做,设置一些对等机作为NATS背后的中继。您总是需要某种引导机制,因此集中服务器可能会以某种方式(当然,这取决于您开发的是什么)进入您的系统。