1

内部ソリューションの発見を実装する必要があります。

次の 2 種類のソフトウェアがあります。

  • サーバー: 多くのハードウェア デバイスを管理し、一部のデータへのアクセスを提供できます (.Net リモート処理)
  • クライアント: 1 つまたは複数のサーバーのデータ (グラフ、統計など) を表示できます。

現在、クライアントで 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 に答える