1

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

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

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

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

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

不知道是不是对自己施加了太多的约束,但我真的希望自己能带着这些要求去申请。

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

  • 我应该把所有东西都放在一个应用程序中,然后添加到防火墙例外列表中,这样它就可以处理服务器和客户端机器上的流量了吗?
  • 我是否应该向防火墙添加自定义例外,允许特定端口上的 UDP 流量,然后让所有流量通过该端口?
  • 是否有第三种更好的选择来管理它?
  • 可以在客户端和服务器机器上运行该服务。但它可以为我处理所有事情吗——比如它同时处理广播发送/接收和应答发送/接收?有没有办法从服务中提取有关网络上服务器的信息?

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

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

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

一切顺利

/萨吉

4

2 回答 2

1

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

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

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

于 2010-03-30T14:47:37.983 回答
0

也许 UPnP 服务器和客户端可以解决您的问题?

于 2010-03-30T14:53:09.350 回答