我想用C#编写一个类似于点对点的聊天程序,但我正在尝试弄清楚网络如何工作。我知道每个对等方都是客户端和服务器。它可以连接和被连接。但我的问题是,如果没有将端口转发到计算机,你如何连接到路由器后面的计算机?我知道像Bittorrent这样的东西可以轻松解决这个问题。我打算使用跟踪器来保持对等方及其监听端口的列表,但我仍然不明白如何解决路由器问题。请问有人能够解释一下吗?
你说得对,这不是一件简单的事情。问题出在一个叫做NAT或网络地址转换的东西上。基本上,你在自己本地网络中拥有的IP地址是独特的,但在公共互联网的更广泛背景下,许多人在同一个路由器后面会有相同的公共IP地址。因此,给定一个IP和一些数据,你不能确定应该把它发送给哪个人。
最有效、最简单的解决方案是通过将第三方介入到数据流中来调解连接。聊天中的每个人不再同时成为“客户端”和“服务器”,而只有一个服务器,并且它位于一个众所周知的公共位置;然后每个人都连接到它。服务器管理通信并在人们聊天时向他们发送消息。
还有其他解决方案。例如,你可以使用一个众所周知的端口(s),而不是使用一个众所周知的服务器:所有通信都在这个端口(s)上进行。然后你就不需要一个服务器,但是所有终点都需要预先配置好打开该端口,这需要进行配置。