1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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();
    }
}