如果设备通过IP连接,则持续监控

时间:2012-12-27 05:52:58

标签: c# winforms sockets ip

我有一个通过LAN连接到计算机的电子设备。我有它的SDK与它进行通信。

在与设备通信之前,必须连接并使用SDK中提供的代码进行注册。这一切都很好。

我的win应用程序在应用程序启动时连接并注册机器,但问题是如果电子设备已关闭然后再切换为开启,应用程序必须再次连接并注册设备。

所以问题是如何持续监控设备是否通过IP连接(类似于通过C#代码点击它)。

因此,不断PING设备的一个问题是我必须在单独的线程上运行它,这样它才不会影响我的实际应用程序。另一个好的解决方案是,如果我得到一些片段代码,当设备通过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失败。而且,它使我的电脑运行缓慢。我犯了什么错误?

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);
}

1 个答案:

答案 0 :(得分:2)

你可以Ping使用c#,

 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);