1

LAN経由でコンピューターに接続されている電子機器を持っています。私はそれと通信するためのSDKを持っています。

デバイスと通信する前に、SDKで提供されているコードに接続して登録する必要があります。それはすべて大丈夫です。

私のwinアプリケーションは、アプリケーションの起動時にマシンを接続して登録しますが、問題は、電子デバイスがスイッチオフされてからスイッチオンされた場合、アプリケーションはデバイスを再度接続して登録する必要があることです。

したがって、問題は、デバイスがIP経由で接続されているかどうかを継続的に監視する方法です(C#コードを介してPINGINGするようなもの)。

したがって、デバイスを常にPINGする際の問題の1つは、実際のアプリケーションに影響を与えないように、別のスレッドで実行する必要があることです。もう1つの良い解決策は、デバイスがIP経由で切断されたときにイベントを発生させるピースコードを取得した場合です。

手伝ってくれてありがとう。よろしく、

編集1:SDKを使用して接続するために使用するコードの一部

bool connected;
connected = axCZKEM1.Connect_Net("192.168.1.201", "4370");

bool registered;
registered = axCZKEM1.RegEvent(1, 65535); 

編集2:sa_ddam213による回答からメソッドを試していますが、pingが失敗することはありません。また、PCの動作が遅くなります。私はどのようなエラーを犯していますか?

while (true)
{
        Ping ping = new Ping();
        ping.PingCompleted += (sender, e) =>
        {
              if(e.Reply.Status != IPStatus.Success)
              {
                   connected=false;
                   registered=false;

                   while(connected && registered)
                   {
                       connected = axCZKEM1.Connect_Net("192.168.1.201", 4370);
                       registered = axCZKEM1.RegEvent(1, 65535);
                    }
               }
          };

          ping.Send("192.168.1.201", 3000);
}
4

1 に答える 1

2

あなたはPingc#を使うことができます、

 PingReply reply = new Ping().Send("127.0.0.1");
 if (reply.Status == IPStatus.Success)
 {
    // yay
 }

非同期メソッド:

Ping ping = new Ping();
ping.PingCompleted += (sender, e) => 
{
    if (e.Reply.Status == IPStatus.Success)
    {
        // yay
    }
};
ping.SendAsync("127.0.0.1", 3000, null);
于 2012-12-27T06:07:00.173 に答える