package com.netsdk.demo.customize;
|
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.demo.util.Testable;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.NetSDKLib.LLong;
|
import com.netsdk.lib.ToolKits;
|
import com.sun.jna.Pointer;
|
|
import java.text.SimpleDateFormat;
|
|
/**
|
* This demo only can be used in LAN.
|
*
|
* @author 29779
|
*/
|
public class SearchDevice implements Testable {
|
|
static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
|
|
private static class SearchCallback implements NetSDKLib.fSearchDevicesCB {
|
private static class SearchHolder {
|
private static SearchCallback intance = new SearchCallback();
|
}
|
|
private SearchCallback() {
|
}
|
|
public static SearchCallback getInstance() {
|
return SearchHolder.intance;
|
}
|
|
@Override
|
public void invoke(Pointer pDevNetInfo, Pointer pUserData) {
|
if (pDevNetInfo != null) {
|
NetSDKLib.DEVICE_NET_INFO_EX deviceInfo = new NetSDKLib.DEVICE_NET_INFO_EX();
|
ToolKits.GetPointerDataToStruct(pDevNetInfo, 0, deviceInfo);
|
System.out.printf("%s:%d\r\n", new String(deviceInfo.szIP).trim(), deviceInfo.nPort);
|
}
|
}
|
}
|
|
private LLong searchHandle;
|
|
/**
|
* start search devices
|
*/
|
public void startSearch() {
|
searchHandle = netsdkApi.CLIENT_StartSearchDevices(SearchCallback.getInstance(), null, null);
|
}
|
|
/**
|
* stop search devices
|
*/
|
public void stopSearch() {
|
if (searchHandle.longValue() != 0) {
|
netsdkApi.CLIENT_StopSearchDevices(searchHandle);
|
searchHandle.setValue(0);
|
}
|
}
|
|
SearchDevicesCB cbSearchDevices = new SearchDevicesCB();
|
|
private class SearchDevicesCB implements NetSDKLib.fSearchDevicesCB {
|
@Override
|
public void invoke(Pointer pDevNetInfo, Pointer pUserData) {
|
NetSDKLib.DEVICE_NET_INFO_EX deviceInfo = new NetSDKLib.DEVICE_NET_INFO_EX();
|
ToolKits.GetPointerData(pDevNetInfo, deviceInfo);
|
|
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String date = simpleDate.format(new java.util.Date());
|
String dateString = date.replaceAll("-", "").replaceAll(":", "").replaceAll(" ", "");
|
|
if (deviceInfo.iIPVersion == 4) { ///过滤IPV4; 如果等于6,输出IPV6; 不过滤IPV4/IPV6都输出
|
System.out.println("dateTime:" + dateString + "\n" +
|
"deviceId:" + new String(deviceInfo.szSerialNo).trim() + "\n" +
|
"IP:" + new String(deviceInfo.szIP).trim() + "\n" +
|
"mask:" + new String(deviceInfo.szSubmask).trim() + "\n" +
|
"gateWay:" + new String(deviceInfo.szGateway).trim() + "\n" +
|
"deviceType:" + new String(deviceInfo.szDeviceType).trim() + "\n");
|
}
|
}
|
}
|
|
// 通过ip 搜索设备
|
public void SearchDevicesByIPs() {
|
new Thread(() -> {
|
NetSDKLib.DEVICE_IP_SEARCH_INFO stuIn = new NetSDKLib.DEVICE_IP_SEARCH_INFO();
|
stuIn.nIpNum = 255;
|
for (int i = 1; i <= 255; i++) {
|
byte[] ip = ("172.23.12." + i).getBytes();
|
System.arraycopy(ip, 0, stuIn.szIPArr[i - 1].szIP, 0, ip.length);
|
}
|
stuIn.write();
|
boolean ret = netsdkApi.CLIENT_SearchDevicesByIPs(stuIn.getPointer(), cbSearchDevices, null, null, 5000);
|
if(!ret){
|
System.err.println("CLIENT_SearchDevicesByIPs failed: "+ToolKits.getErrorCode());
|
return;
|
}
|
System.out.println("CLIENT_SearchDevicesByIPs succeed.");
|
}).start();
|
}
|
|
@Override
|
public void initTest() {
|
/**
|
* initialization, only be called once.
|
*/
|
netsdkApi.CLIENT_Init(null, null);
|
}
|
|
@Override
|
public void runTest() {
|
System.out.println("run test");
|
|
CaseMenu menu = new CaseMenu();
|
|
menu.addItem(new CaseMenu.Item(this, "Start Search Devices", "startSearch"));
|
menu.addItem(new CaseMenu.Item(this, "Stop Search Devices", "stopSearch"));
|
menu.addItem(new CaseMenu.Item(this, "SearchDevicesByIPs", "SearchDevicesByIPs"));
|
|
menu.run();
|
}
|
|
@Override
|
public void endTest() {
|
/**
|
* clean up resources in SDK
|
*/
|
netsdkApi.CLIENT_Cleanup();
|
}
|
|
public static void main(String[] args) {
|
SearchDevice demo = new SearchDevice();
|
demo.initTest();
|
demo.runTest();
|
demo.endTest();
|
}
|
}
|