Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的发现#_C#_.net_Discovery - Fatal编程技术网

C# c语言中的发现#

C# c语言中的发现#,c#,.net,discovery,C#,.net,Discovery,我必须为内部解决方案实现一些发现 我们有两种软件: 服务器:它们管理大量硬件设备,并可以访问某些数据(.Net远程处理) 客户端:它们可以显示一个或多个服务器的数据(图形、统计数据等) 目前,我们正在客户端上手动设置IP 我们希望实现一个发现 我们有以下要求: 它必须在c语言中可用# 当服务器启动时,它必须快速显示为可用 它关闭时也是这样 如果服务器没有以干净的方式停止,我们可以有一种方法来检测它(不需要非常快,可以每10-15分钟进行一次) 它可以给我一些信息(服务器版本、要使用的端口等

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

我们有两种软件:

  • 服务器:它们管理大量硬件设备,并可以访问某些数据(.Net远程处理)
  • 客户端:它们可以显示一个或多个服务器的数据(图形、统计数据等)
目前,我们正在客户端上手动设置IP

我们希望实现一个发现

我们有以下要求:

  • 它必须在c语言中可用#
  • 当服务器启动时,它必须快速显示为可用
  • 它关闭时也是这样
  • 如果服务器没有以干净的方式停止,我们可以有一种方法来检测它(不需要非常快,可以每10-15分钟进行一次)
  • 它可以给我一些信息(服务器版本、要使用的端口等)
  • 我们有多个网卡的客户端计算机,我们必须在每个网卡上发现服务器
你有协议、库吗。。。建议


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

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


并拥有发现的应用程序(服务器)应答,要接收应答,请使用UdpClient.receive(),它为您提供应答站的IP。

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


并拥有发现的应用程序(服务器)答案,要接收答案,请使用
UdpClient.receive()
,它将为您提供应答站的IP。

可能会引起兴趣。定期发送UDP数据包有什么问题?您可以通过发送/接收来推出自己的轻量级解决方案,或者使用。@GrantThomas:我不知道,我在想,如果我们不使用WCF,那么使用WCF发现就没有多大意义services@Dennis:定期数据包必须非常接近(具有反应性),这将非常消耗网络,可能会引起兴趣。定期发送UDP数据包有什么问题?您可以通过发送/接收来推出自己的轻量级解决方案,格兰托马斯:我不知道,我在想,如果我们不使用WCF,那么使用WCF发现就没有多大意义services@Dennis:周期性数据包必须非常接近(具有反应性)这将非常耗费网络使用UdpClient发送消息和使用此套接字之间的主要区别是什么?使用UdpClient发送消息和使用此套接字之间的主要区别是什么?
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);