在c#中创建严格受限的服务器发现应用程序

时间:2010-03-30 14:27:46

标签: c# service firewall broadcast

我正在写信给你,因为我需要解决一个新问题,而且我现在已经把头撞到墙上太久了。

基本上,我需要创建一个可以处理以下内容的应用程序:

用户启动应用程序,该应用程序向子网发送广播,并使用其IP(以及一些其他信息)接收所有服务器的响应。然后,用户可以选择他想要连接的服务器。

让它工作很简单,识别子网,用UDP广播,然后让不同的服务器应用程序接收它并发回响应。问题在于我需要考虑的这些限制:

  • 网络中的服务器计算机上很可能还有客户端,这意味着我们可以假设应用程序存在于所有计算机上。每台机器都需要运行监听器,每台机器都可以启动GUI来选择服务器。
  • 我只允许向防火墙添加一个例外 - 这个例外处理发送广播,接收广播,发送答案和接收答案。
  • 我也应该只添加一个Windows服务
  • 在服务器计算机上,监听器应作为Windows服务运行,因此用户不会注意到它。用户也不会注意到响应被发送回客户端。
  • 在客户端计算机上,用户可以启动一个应用程序,该应用程序将通知应用程序发送广播,并将获得所有服务器响应,以便用户可以选择一个进行连接。
  • 除了用户为了选择服务器而启动的应用程序外,不应该与用户进行任何交互。甚至没有弹出窗口,要求用户允许流量通过防火墙 - 它应该全部自动
  • 它需要在Win XP,Win Vista和Win 7之间和之间工作。

我不知道我是否对自己施加了太多限制,但我真的希望我可以满足这些要求。

我有一些想法 - 我只需要弄清楚如何做到这一点:

  • 我是否应该将所有内容整合到一个应用程序中,我将其添加到防火墙例外列表中,以便它将处理服务器和客户端计算机上的流量?
  • 我应该向防火墙添加自定义例外,允许特定端口上的UDP流量,然后让所有流量流过吗?
  • 是否有第三个更好的选择来管理它?
  • 可以在客户端和服务器计算机上运行该服务。但它可以为我照顾一切 - 比如处理广播发送/接收和回复发送/接收?有没有办法从服务中提取有关网络服务器的信息?

我知道这很多,但我真的希望你能够帮助我。

如果我不够清楚,或者您需要进一步解释,请告诉我。

我在C#.Net中编码,我可以利用.Net框架中的所有内容。一旦我实现了这个功能

一切顺利

/ Sagi

2 个答案:

答案 0 :(得分:1)

如果将一台计算机指定为主服务器,那么点对点网络问题就变得简单到了微不足道的程度。它应该有一个众所周知的名称,所有子服务器都可以连接到它们,以便它们可以发布(和撤销)它们的可用性。然后,客户端可以向同一服务器发送查询请求,并获得已知服务器的列表。

这也可以解决您的防火墙问题,主服务器可能正在侦听端口80。

查看System.Net.PeerToPeer命名空间,了解框架支持的p2p解决方案。

答案 1 :(得分:0)

也许UPnP服务器和客户端可能是您问题的解决方案?