在c#中发现

时间:2013-02-11 09:01:24

标签: c# .net discovery

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

我们有两种软件:

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

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

我们希望实施发现

我们有以下要求:

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

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

我们尝试过UPnP,但似乎 c#中没有符合我们要求的优质服务器+客户端实现

1 个答案:

答案 0 :(得分: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。