代码之家  ›  专栏  ›  技术社区  ›  The.Anti.9

C点对点网络-绕过路由器

  •  4
  • The.Anti.9  · 技术社区  · 15 年前

    我想用C语言编写一个类似点对点的聊天程序。我想弄清楚网络是如何运作的。我知道这个概念是每个对等点同时是一个客户机和一个服务器。它可以连接到。但我的问题是,你如何连接到路由器后面的计算机而不将端口转发到该计算机?我知道像BitTorrent这样的东西没问题。我本来打算用一个跟踪器来保存对等点和它们监听的端口的列表,但是我仍然不知道如何解决路由器问题。有人能解释一下吗?

    3 回复  |  直到 9 年前
        1
  •  3
  •   President James K. Polk    15 年前

    除了john feminella的答案之外,您还可以考虑使用 UPNP 许多用户网络设备支持的服务。

        2
  •  4
  •   John Feminella    15 年前

    你说得对,这不是小事。问题是什么叫做nat,或者 network address translation . 从本质上讲,您在自己的本地网络中拥有的IP是唯一的,但是在公共Internet的更广泛上下文中,同一路由器后面的许多人将拥有相同的公共IP。因此,给定一个IP和一些数据,就不一定能告诉另一端的哪个人应该得到它。

    最有效和最简单的解决方案是让第三方通过插入数据流来调解连接。聊天中的每个人不是同时成为“客户机”和“服务器”,而是只有一个服务器,它位于一个众所周知的公共位置;然后每个人都连接到它。然后,服务器管理通信并在人们聊天时向他们发送消息。

    不过,还有其他解决办法。例如,您可以使用 端口(S) :所有通信都在此端口上进行。然后不需要服务器,但所有端点都需要打开该端口,这需要事先进行配置。

        3
  •  3
  •   Richard Harrison    15 年前

    我假设你是说在nat环境中,如果是这样的话,请阅读并理解 Peer-to-Peer Communication Across Network Address Translators (Ford, Srisuresh & Kegel .

    关键的概念是,每个客户机都必须启动一个连接,该连接将打开通过nat设备的路径。参考 Pidgin source code 得到一些想法。