Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Biometrics device ping becoming failed after sometime

I have ZKTeco Biometrics device which is connected with a C# windows application using This tutorial (C# ZKTeco Biometric Device Getting Started).

It is working fine but after sometime, my application becoming failed to ping the device. As below code suggested, I am trying to ping the device after every 25 seconds.

  private void TimerCheckPingAndCloseAttendanceForm() {
  timerCheckPingAndCloseAttendanceForm            = new Timer();
  timerCheckPingAndCloseAttendanceForm.Tick       += new EventHandler(CheckPingAndCloseAttendanceForm);
  timerCheckPingAndCloseAttendanceForm.Interval   = 25000;//25 seconds.
  timerCheckPingAndCloseAttendanceForm.Start();
        }


 private void CheckPingAndCloseAttendanceForm(object sender, EventArgs e) {
     string ipAddress = tbxDeviceIP.Text.Trim();
     if (UniversalStatic.PingTheDevice(ipAddress) == false) {
           //CloseAttendaceListForm();
           IsDeviceConnected = false;
           string infoString = "Application started on " + applicationStartDateTime.ToString() + " and ping failed on " + DateTime.Now.ToString() + " then, app closed while device ip is "+ ipAddress;
          File.AppendAllText("ConnectionLog.txt", infoString + Environment.NewLine);
          Application.Exit();
          //timerCheckPingAndCloseAttendanceForm.Tick -= new EventHandler(CheckPingAndCloseAttendanceForm);
            }
        }

And when I am trying to ping the command from cmd the device show destination host is unreachable. But whenever I restart the device, the ping working fine. I don't know where is the problem? Either the network problem or its coding issue?

Note: I am doing a ping on regular time interval, because on Disconnected Event is not working. I am assuming ping failed meaning is the device has disconnected with the application.

like image 295
Muhammad Faizan Khan Avatar asked Nov 28 '18 10:11

Muhammad Faizan Khan


People also ask

How do you connect a biometric device?

to Start >> run and type NFD and then press enter. This will open device diagnostic utility. Under Device tab click on device scan button, click init button then place finger on sensor and click capture. Just check if image appear on left window or not.


1 Answers

First of all : Thank you for going through my article

You are doing it the wrong way.

Trying to ping the device after every 25 seconds is unnecessary.

The only job of the UniversalStatic.PingTheDevice method is to check if the device is presumably active, the first time you connect with the device.

If you want to check the status of the device i.e IsDeviceConnected, All you need to do is register to the device OnDisConnected event provided by the SDK.

It seems the code here at line number 57 has already done the OnDisConnected event registration for you.

All you need to do now is set your IsDeviceConnected to false when the objCZKEM_OnDisConnected method in the ZkemClient.cs class is called upon by the device itself.

Sample snippet : In the ZkemClient.cs class file, between line number 81-84

void objCZKEM_OnDisConnected()
{
     IsDeviceConnected = false;  // <-- Add this line
}

Now, Every time you try to make a call to the device, All you need to do is check for the value of your IsDeviceConnected.

like image 170
Ozesh Avatar answered Sep 22 '22 18:09

Ozesh