c# 点对点网络 - 绕过路由器

标签 c# networking p2p

我想用 C# 编写一个类似点对点的聊天程序。我想弄清楚网络是如何工作的。我知道这个概念是每个对等点同时是客户端和服务器。它可以连接并被连接到。但我的问题是,如何连接到路由器后面的计算机而不将端口转发到该计算机?我知道像 Bittorrent 这样的东西可以毫无问题地做到这一点。我正计划使用跟踪器来保留对等点列表和他们监听的端口,但我仍然不明白如何解决路由器问题。有人可以解释一下吗?

最佳答案

你是对的,这不是微不足道的。问题是所谓的 NAT,或 network address translation 。本质上,您在自己的本地网络中拥有的 IP 是唯一的,但在更广泛的公共(public)互联网环境中,同一路由器后面的许多人将拥有相同的公共(public) IP。因此,给定一个 IP 和一些数据,您不一定能知道另一端的哪个人应该得到它。

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

不过,还有其他解决方案。例如,您可以使用众所周知的端口,而不是使用众所周知的服务器:所有通信都在该端口上进行。然后你不需要服务器,但所有端点都需要打开该端口,这需要事先配置。

关于c# 点对点网络 - 绕过路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710252/

相关文章:

android - 在android中使用NSD api注册服务时如何添加TXT记录?

amazon-web-services - 导出规则||允许流量流向所有以 10 开头的 cidr

c# - 如何在带有cordova的windows phone 8上使用现有的sqlite数据库

c# - 中等信任度的 MySql 数据实体 EF6

android - 在森林中通过 Wi-Fi 连接多个设备

java - 有没有办法根据电话号码从电话中获取 WAN IP 地址?

python - BitTorrent 客户端 : Getting Peer List From Trackers [Python]

javascript - WebRTC STUN 服务器如何反馈 SDP 和 ICE 候选人?

c# - 如何从单独类中的代码更新 UI 进度条或后台工作程序?

c# - 我的 DDD 工厂类中应该有哪些方法?