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

4
我想用C#编写一个类似于点对点的聊天程序,但我正在尝试弄清楚网络如何工作。我知道每个对等方都是客户端和服务器。它可以连接和被连接。但我的问题是,如果没有将端口转发到计算机,你如何连接到路由器后面的计算机?我知道像Bittorrent这样的东西可以轻松解决这个问题。我打算使用跟踪器来保持对等方及其监听端口的列表,但我仍然不明白如何解决路由器问题。请问有人能够解释一下吗?
3个回答

4

你说得对,这不是一件简单的事情。问题出在一个叫做NAT或网络地址转换的东西上。基本上,你在自己本地网络中拥有的IP地址是独特的,但在公共互联网的更广泛背景下,许多人在同一个路由器后面会有相同的公共IP地址。因此,给定一个IP和一些数据,你不能确定应该把它发送给哪个人。

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

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


服务器 == 在端口上监听连接。 - President James K. Polk
@Greg:我可能可以更好地表达。我的意思是,“……不要使用一个众所周知的端点和一个众所周知的端口,你只需要一个众所周知的端口,只要每个人事先配置好并且所有对等方都相互认识。” 对于聊天程序来说并不是非常有用,但这是可能的。 - John Feminella

3
除了John Feminella的回答外,您还可以考虑使用许多消费者网络设备支持的UPNP服务。请参见UPNP服务。

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接