1

我必须为内部解决方案实施一些发现。

我们有两种软件:

  • 服务器:他们管理很多硬件设备,可以访问一些数据(.Net远程处理)
  • 客户端:他们可以显示一个或多个服务器的数据(图表、统计数据,...)

目前我们正在客户端上手动设置IP。

我们想实现一个发现

我们有以下要求:

  • 它必须在 c# 中可用
  • 当服务器启动时,它必须非常快速地显示为可用
  • 关机的时候一样
  • 如果服务器没有以干净的方式停止,我们可以有一种方法来检测它(不需要非常快,可以每 10-15 分钟完成一次)。
  • 它可以给我一些信息(服务器版本,要使用的端口,...)
  • 我们有多个网卡的客户端计算机,我们必须在每个网卡上发现服务器

你有一个协议,一个图书馆,......建议吗?

我们尝试了 UPnP,但似乎C#中没有满足我们要求的良好服务器 + 客户端实现

4

1 回答 1

4

使用来自发现应用程序(客户端)的 UDP 广播:

int broadcastPort = //something
byte[] msg = //something

//Cycle this for all IP adresses
IPAddress broadcastIp = //Broadcast address for this net
IPEndPoint destinationEndpoint = new IPEndPoint(broadcastIp, broadcastPort);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
sock.SendTo(msg, broadcastEndpoint);

并让发现的应用程序(服务器)回答,以接收回答使用UdpClient.Receive(),它为您提供回答站的 IP。

于 2013-02-11T09:12:08.687 回答