- 1 #include <stdio.h>
- 2 #include <iostream>
- 3 #include "HCNetSDK.h"
- 4 using namespace std;
- 5
- 6 void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void*pUser)
- 7 {
- 8
- 9 cout << "进入回调" << endl;//判断一下没有进入回调 记得在设备那边设置回调的地址和端口不然会无法进入回调
- 10 NET_DVR_PDC_ALRAM_INFO struPdcALramInfo;//数据结构体
- 11 memcpy(&struPdcALramInfo, pAlarmInfo, sizeof(NET_DVR_PDC_ALRAM_INFO));
- 12 switch (lCommand)//消息类型
- 13 {
- 14 cout << lCommand << endl;
- 15 case COMM_ALARM_PDC:
- 16 {
- 17 if (struPdcALramInfo.byMode == 0)
- 18 {
- 19 //测试显示数据
- 20 cout << "当前时间:" << struPdcALramInfo.uStatModeParam.struStatFrame.dwRelativeTime << endl;
- 21 cout << "进来人数:" << struPdcALramInfo.dwEnterNum << endl;
- 22 cout << "离开人数" << struPdcALramInfo.dwLeaveNum << endl;
- 23 break;
- 24 }
- 25
- 26 }
- 27 default:break;
- 28 }
- 29 }
- 30 void main() {
- 31
- 32 NET_DVR_Init();// 初始化
- 33 NET_DVR_SetConnectTime(2000, 1);//设置连接时间与重连时间
- 34 NET_DVR_SetReconnect(10000, true);
- 35 LONG lUserID;// 注册设备
- 36 NET_DVR_DEVICEINFO_V30 struDeviceInfo;
- 37 char ip[32] = "192.168.x.64";//设备的IP地址 需要和电脑端ip在同一个网段
- 38 char user[32] = "xxx";//登录名
- 39 char userPass[32] = "xxx";//密码 不需要多说了吧
- 40
- 41 lUserID = NET_DVR_Login_V30(ip, 8000, user, userPass, &struDeviceInfo);//这里端口号为8000
- 42 if (lUserID < 0)
- 43 {
- 44 printf("Login error, %d\n", NET_DVR_GetLastError());//如果登录失败,这里会有原因的,可查看文档对症下药
- 45 NET_DVR_Cleanup();
- 46 return;
- 47 }
- 48 else
- 49 {
- 50 cout<<"Login success lUserID:"<< lUserID <<endl;
- 51 }
- 52
- 53 char localIP[16] = "192.168.x.60";//本地的Ip 设置回调用的
- 54
- 55 NET_DVR_NETCFG_V30 myNETCFG;//配置报警主机和端口
- 56 memcpy(&(myNETCFG.struAlarmHostIpAddr.sIpV4), localIP, sizeof(myNETCFG.struAlarmHostIpAddr.sIpV4));//内存拷贝
- 57 cout << myNETCFG.struAlarmHostIpAddr.sIpV4 << endl;//可以忽略
- 58 myNETCFG.wAlarmHostIpPort =8000;
- 59 BOOL isSuccess = NET_DVR_SetDVRMessageCallBack_V30(MessageCallback, &myNETCFG);//设置报警回调函数
- 60 if (isSuccess)
- 61 {
- 62 cout << "设置回调成功" << endl;
- 63 }
- 64 LONG lHandle;//启用监听
- 65 lHandle = NET_DVR_StartListen_V30(NULL, 8000, MessageCallback, NULL);
- 66 if (lHandle < 0)
- 67 {
- 68 printf("NET_DVR_StartListen_V30 error, %d\n", NET_DVR_GetLastError());
- 69 NET_DVR_Logout(lUserID);
- 70 NET_DVR_Cleanup();
- 71 return;
- 72 }
- 73 Sleep(5000);//这里是为了测试所以写了个休眠卡主线程也可以理解为监听时长
- 74 if (!NET_DVR_StopListen_V30(lHandle))//结束监听
- 75 {
- 76 printf("NET_DVR_StopListen_V30 error, %d\n", NET_DVR_GetLastError());
- 77 NET_DVR_Logout(lUserID);
- 78 NET_DVR_Cleanup();
- 79 return;
- 80 }
- 81 NET_DVR_Logout(lUserID);//注销用户
- 82 NET_DVR_Cleanup(); //释放 SDK 资源
- 83 return;
- 84 }