2013-02-11 25 views
1

我必須爲內部解決方案實現一些發現。c中的發現#

我們有兩種類型的軟件:

  • 服務器:他們管理很多的硬件設備,可以給訪問一些數據(.Net遠程)
  • 客戶:他們可以顯示一個或幾個服務器的數據(圖形,統計數據,...)

目前我們正在手動設置IP在客戶端。

我們想實現一個發現

我們有以下要求:

  • 它必須是在C#中使用
  • 當一個服務器時,它必須顯示爲可非常快速度
  • 同樣的,當它關閉
  • 如果服務器沒有以一種乾淨的方式停下來,我們可以有一種方法來檢測它(不需要非常快,每10-15分鐘就可以完成一次)。
  • 它可以給我一些信息(服務器版本,端口使用,...)
  • 我們的客戶端計算機有多個網卡,我們必須發現每個卡

服務器你有協議,圖書館,...建議?

我們嘗試的UPnP,但似乎有在C#符合我們的要求從情迷應用

+0

[WCF,可能特別是Peer Channels等](http://msdn.microsoft.com/en-us/library/windows/desktop/bb756931.aspx)可能是有意義的。 – 2013-02-11 09:04:23

+0

定期發送UDP數據包有什麼問題? – Dennis 2013-02-11 09:04:46

+0

您可以通過發送/接收[多播UDP數據包](http://www.jarloo.com/c-udp-multicasting-tutorial/)來發布您自己的輕量級解決方案,或者訪問[WCF Discovery](http:// msdn.microsoft.com/en-us/library/dd456782(v=vs.100).aspx)。 – khellang 2013-02-11 09:06:04

回答

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。

+0

使用UdpClient發送消息和使用此套接字之間的主要區別是什麼? – J4N 2013-02-11 11:22:32

+0

只是易用性。 – 2013-02-11 11:59:14