向nat后面的计算机发送通知

时间:2013-11-18 02:37:03

标签: c# networking tcp udp nat

我有一台名为Server的计算机,我有几台名为Nodes的计算机。节点位于NAT(路由器)后面,Server不是。换句话说,每个节点都可以连接到Server,但Server无法连接到节点。

简而言之,我想从服务器向节点发送通知

  • 一种解决方案是打开多个tcp连接。但由于有多个节点且节点永远保持连接,我宁愿使用不同的选项。

  • 另一个解决方案是让每个节点每10秒左右发出一次请求。问题是,当发出通知时,我希望它立即执行。

  • 另一种解决方案是在路由器上移植转发流量,但有些用户无法访问路由器。

我应该如何实现?我需要发送一个非常简单的通知,如果某个节点收到该通知,它将执行特定的操作。只是出于好奇,比如Drop Box。修改文件的那一刻,它就会立即在不同的计算机上更新它。他们是怎么做到的?他们使用民意调查吗?

修改

这是我认为最好的解决方案:

由于服务器正在运行我的代码以及客户端。我将让客户端每30秒发送一次UDP数据包。然后服务器可以回复,NAT将启用流量。因此,每当我想通知节点时,我基本上都必须发送一个数据包。这个解决方案就像发明了一些新东西。从每次发明新事物的经验来看,我都有不好的成功。但这听起来不错。

1 个答案:

答案 0 :(得分:1)

不幸的是,这不是你的发明。这就是eMule用于连接NAT背后的客户端的方式。它的确有效。请记住,您只能以这种方式使用UDP。

与此同时,如果你想快速可靠地制作一些东西(也许),为什么不试试像Windows Azure Service Bus这样的第三方服务呢?然后,您可以专注于您的逻辑,而不是基础细节。