一.开发环境:Linux64(ubuntu环境)

二.SDK版本:CH-HCNetSDKV6.1.4.17_build20200331_Linux64(官网下载sdk)

三.开发环境准备:安装 jdk , eclipse, Linux下需要将库文件放置到/usr/lib64目录下

三.demo样例

1. 设备登录

HCNetSDK sdk = HCNetSDK.INSTANCE;//加载设备库文件
sdk.NET_DVR_Init();//初始化SDK
logger.info("初始化状态码为:" + sdk.NET_DVR_GetLastError());
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
int lUserId = sdk.NET_DVR_Login_V30(ip, port, userName, passwd, m_strDeviceInfo);
if(lUserId  > 0 ){logger.info("登录成功");
} else {logger.info("登录失败, 错误码:" + sdk.NET_DVR_GetLastError());
}

2. 获取设备用户信息

            HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();struCardCond.read();struCardCond.dwSize = struCardCond.size();struCardCond.dwCardNum = 0xffffffff; // 查询所有struCardCond.write();Pointer ptrStruCond = struCardCond.getPointer();m_lSetCardCfgHandle = sdk.NET_DVR_StartRemoteConfig(userId, HCNetSDK.NET_DVR_GET_CARD, ptrStruCond,struCardCond.size(), null, null);if (m_lSetCardCfgHandle == -1) {String desc = "建立下发卡长连接失败,错误码为" + sdk.NET_DVR_GetLastError();logger.info(desc);res.setResult(UsersResult.RES_DEVICE_ERROR);res.setDescription(desc);return res;} else {logger.info("建立下发卡长连接成功!");}HCNetSDK.NET_DVR_CARD_RECORD struCardRecord = new HCNetSDK.NET_DVR_CARD_RECORD();struCardRecord.read();struCardRecord.dwSize = struCardRecord.size();struCardRecord.write();List<UserBean> list = new ArrayList<UserBean>();// TODO 根据卡号获取单个卡while (true) {dwState = sdk.NET_DVR_GetNextRemoteConfig(m_lSetCardCfgHandle, struCardRecord.getPointer(),struCardRecord.size());struCardRecord.read();if (dwState == -1) {String desc = "NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + sdk.NET_DVR_GetLastError();logger.info(desc);break;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEEDWAIT) {logger.info("配置等待");Thread.sleep(10);continue;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {String desc = "获取卡参数失败,错误码:" + sdk.NET_DVR_GetLastError();logger.info(desc);break;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {String desc = "获取卡参数异常,错误码:" + sdk.NET_DVR_GetLastError();logger.info(desc);break;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {UserBean userInfo = new UserBean();userInfo.setName(new String(struCardRecord.byName, "UTF-8").trim());userInfo.setPwd(new String(struCardRecord.byCardPassword, "UTF-8").trim());userInfo.setCardNo(new String(struCardRecord.byCardNo).trim());userInfo.setCardType((int)struCardRecord.byCardType);logger.info("获取卡信息为:" + JSONObject.toJSONString(userInfo));list.add(userInfo);continue;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {String desc = ("获取卡参数完成");break;}}

3. 对设备进行插入用户数据

            HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();struCardCond.read();struCardCond.dwSize = struCardCond.size();struCardCond.dwCardNum = 1; // 下发一张struCardCond.write();Pointer ptrStruCond = struCardCond.getPointer();m_lSetCardCfgHandle = sdk.NET_DVR_StartRemoteConfig(userId, HCNetSDK.NET_DVR_SET_CARD, ptrStruCond,struCardCond.size(), null, null);if (m_lSetCardCfgHandle == -1) {String desc = "下发卡建立长连接失败,错误码为" + sdk.NET_DVR_GetLastError();logger.info(desc);return res;} else {logger.info("下发卡建立长连接成功!");}HCNetSDK.NET_DVR_CARD_RECORD struCardRecord = new HCNetSDK.NET_DVR_CARD_RECORD();struCardRecord.read();struCardRecord.dwSize = struCardRecord.size();for (int i = 0; i < HCNetSDK.ACS_CARD_NO_LEN; i++) {struCardRecord.byCardNo[i] = 0;}byte[] cardBytes = user.getCardNo().getBytes();for (int i = 0; i < user.getCardNo().length(); i++) {struCardRecord.byCardNo[i] = cardBytes[i];}struCardRecord.byCardType = 1; // 普通卡struCardRecord.byLeaderCard = 0; // 是否为首卡,0-否,1-是struCardRecord.byUserType = 0;struCardRecord.byDoorRight[0] = 1; // 门1有权限struCardRecord.struValid.byEnable = 1; // 卡有效期使能,下面是卡有效期从2000-1-1 11:11:11到2030-1-1 11:11:11struCardRecord.struValid.struBeginTime.wYear = 2000;struCardRecord.struValid.struBeginTime.byMonth = 1;struCardRecord.struValid.struBeginTime.byDay = 1;struCardRecord.struValid.struBeginTime.byHour = 11;struCardRecord.struValid.struBeginTime.byMinute = 11;struCardRecord.struValid.struBeginTime.bySecond = 11;struCardRecord.struValid.struEndTime.wYear = 2030;struCardRecord.struValid.struEndTime.byMonth = 1;struCardRecord.struValid.struEndTime.byDay = 1;struCardRecord.struValid.struEndTime.byHour = 11;struCardRecord.struValid.struEndTime.byMinute = 11;struCardRecord.struValid.struEndTime.bySecond = 11;struCardRecord.wCardRightPlan[0] = 1;// 卡计划模板1有效struCardRecord.dwEmployeeNo = Integer.valueOf(user.getWkno()); // 工号byte[] strCardName = user.getName().getBytes("UTF-8"); // 姓名for (int i = 0; i < HCNetSDK.NAME_LEN; i++) {struCardRecord.byName[i] = 0;}for (int i = 0; i < strCardName.length; i++) {struCardRecord.byName[i] = strCardName[i];}byte[] strCardPwd = user.getPwd().getBytes();for (int i = 0; i < HCNetSDK.CARD_PASSWORD_LEN; i++) {struCardRecord.byCardPassword[i] = 0;}for (int i = 0; i < strCardPwd.length; i++) {struCardRecord.byCardPassword[i] = strCardPwd[i];}struCardRecord.write();HCNetSDK.NET_DVR_CARD_STATUS struCardStatus = new HCNetSDK.NET_DVR_CARD_STATUS();struCardStatus.read();struCardStatus.dwSize = struCardStatus.size();struCardStatus.write();IntByReference pInt = new IntByReference(0);while (true) {dwState = sdk.NET_DVR_SendWithRecvRemoteConfig(m_lSetCardCfgHandle, struCardRecord.getPointer(),struCardRecord.size(), struCardStatus.getPointer(), struCardStatus.size(), pInt);struCardStatus.read();if (dwState == -1) {String desc = "下发卡NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + sdk.NET_DVR_GetLastError();logger.info(desc);break;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEEDWAIT) {logger.info("下发卡配置等待");Thread.sleep(10);continue;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {String desc = "下发卡失败, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 错误码:"+ struCardStatus.dwErrorCode;logger.info(desc);break;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {String desc = "下发卡异常, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 错误码:"+ struCardStatus.dwErrorCode;logger.info(desc);break;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {if (struCardStatus.dwErrorCode != 0) {String desc = "下发卡成功,但是错误码" + struCardStatus.dwErrorCode + ", 卡号:"+ new String(struCardStatus.byCardNo).trim();logger.info(desc);} else {String desc = "下发卡成功, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 状态:"+ struCardStatus.byStatus;logger.info(desc);}continue;} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {String desc = "下发卡完成";logger.info(desc);break;}}

4.下发人脸

            int m_lSetFaceCfgHandle = -1; // 下发人脸长连接句柄int dwFaceState = -1; // 下发人脸数据状态HCNetSDK.NET_DVR_FACE_COND struFaceCond = new HCNetSDK.NET_DVR_FACE_COND();struFaceCond.read();struFaceCond.dwSize = struFaceCond.size();struFaceCond.byCardNo = (user.getCardNo() + "1").getBytes();struFaceCond.dwFaceNum = 1; // 下发一张struFaceCond.dwEnableReaderNo = 1;// 人脸读卡器编号struFaceCond.write();Pointer ptrStruFaceCond = struFaceCond.getPointer();m_lSetFaceCfgHandle = sdk.NET_DVR_StartRemoteConfig(userId, HCNetSDK.NET_DVR_SET_FACE, ptrStruFaceCond,struFaceCond.size(), null, null);if (m_lSetFaceCfgHandle == -1) {String desc = "下发人脸建立长连接失败,错误码为" + sdk.NET_DVR_GetLastError();logger.info(desc);return res;} else {logger.info("下发人脸建立长连接成功!");}HCNetSDK.NET_DVR_FACE_RECORD struFaceRecord = new HCNetSDK.NET_DVR_FACE_RECORD();struFaceRecord.read();struFaceRecord.dwSize = struFaceRecord.size();for (int i = 0; i < HCNetSDK.ACS_CARD_NO_LEN; i++) {struFaceRecord.byCardNo[i] = 0;}byte[] cardNoByte = user.getCardNo().getBytes();for (int i = 0; i < user.getCardNo().length(); i++) {struFaceRecord.byCardNo[i] = cardNoByte[i];}/****************************************** 文件里二进制数据*****************************************/InputStream picfile = new ByteArrayInputStream(imageBytes);int picdataLength = 0;try {picdataLength = picfile.available();} catch (IOException e1) {e1.printStackTrace();}HCNetSDK.BYTE_ARRAY ptrpicByte = new HCNetSDK.BYTE_ARRAY(picdataLength);try {picfile.read(ptrpicByte.byValue);} catch (IOException e2) {e2.printStackTrace();}ptrpicByte.write();struFaceRecord.dwFaceLen = picdataLength;struFaceRecord.pFaceBuffer = ptrpicByte.getPointer();struFaceRecord.write();HCNetSDK.NET_DVR_FACE_STATUS struFaceStatus = new HCNetSDK.NET_DVR_FACE_STATUS();struFaceStatus.read();struFaceStatus.dwSize = struFaceStatus.size();struFaceStatus.write();IntByReference pInt = new IntByReference(0);while (true) {dwFaceState = sdk.NET_DVR_SendWithRecvRemoteConfig(m_lSetFaceCfgHandle, struFaceRecord.getPointer(),struFaceRecord.size(), struFaceStatus.getPointer(), struFaceStatus.size(), pInt);struFaceStatus.read();if (dwFaceState == -1) {String desc = ("下发人脸 NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + sdk.NET_DVR_GetLastError());logger.info(desc);break;} else if (dwFaceState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEEDWAIT) {logger.info("下发人脸 配置等待");Thread.sleep(10);continue;} else if (dwFaceState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {String desc = ("下发人脸失败, 卡号: " + new String(struFaceStatus.byCardNo).trim() + ", 错误码:"+ sdk.NET_DVR_GetLastError());logger.info(desc);break;} else if (dwFaceState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {String desc = ("下发人脸异常, 卡号: " + new String(struFaceStatus.byCardNo).trim() + ", 错误码:"+ sdk.NET_DVR_GetLastError());logger.info(desc);break;} else if (dwFaceState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {if (struFaceStatus.byRecvStatus != 1) {String desc = ("下发人脸失败,人脸读卡器状态:" + struFaceStatus.byRecvStatus + ", 卡号:"+ new String(struFaceStatus.byCardNo).trim());logger.info(desc);break;} else {String desc = ("下发人脸成功, 卡号: " + new String(struFaceStatus.byCardNo).trim() + ", 状态:"+ struFaceStatus.byRecvStatus);logger.info(desc);}continue;} else if (dwFaceState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {String desc = ("下发人脸完成,卡号: " + new String(struFaceStatus.byCardNo).trim());logger.info(desc);res.setResult(ActionResult.RES_SUCC);res.setDescription(desc);break;}}

5. 设备布防监听

5.1 创建监听回调类

public class AlarmHikFMSGCallBack implements HCNetSDK.FMSGCallBack {Logger logger = LoggerFactory.getLogger(getClass());public AlarmHikFMSGCallBack() {super();}@Overridepublic void invoke(int lCommand, NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {String sAlarmType = new String();// DefaultTableModel alarmTableModel = ((DefaultTableModel)// jTableAlarm.getModel());//获取表格模型String[] newRow = new String[3];// 报警时间Date today = new Date();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String[] sIP = new String[2];sAlarmType = new String("lCommand=") + lCommand;// lCommand是传的报警类型int cmdValue = lCommand;logger.info("模式类型:" + cmdValue);switch (cmdValue) {case HCNetSDK.COMM_ALARM_V30:HCNetSDK.NET_DVR_ALARMINFO_V30 strAlarmInfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30();strAlarmInfoV30.write();Pointer pInfoV30 = strAlarmInfoV30.getPointer();pInfoV30.write(0, pAlarmInfo.getByteArray(0, strAlarmInfoV30.size()), 0, strAlarmInfoV30.size());strAlarmInfoV30.read();switch (strAlarmInfoV30.dwAlarmType) {case 0:sAlarmType = sAlarmType + new String(":信号量报警") + "," + "报警输入口:"+ (strAlarmInfoV30.dwAlarmInputNumber + 1);break;case 1:sAlarmType = sAlarmType + new String(":硬盘满");break;case 2:sAlarmType = sAlarmType + new String(":信号丢失");break;case 3:sAlarmType = sAlarmType + new String(":移动侦测") + "," + "报警通道:";for (int i = 0; i < 64; i++) {if (strAlarmInfoV30.byChannel[i] == 1) {sAlarmType = sAlarmType + "ch" + (i + 1) + " ";}}break;case 4:sAlarmType = sAlarmType + new String(":硬盘未格式化");break;case 5:sAlarmType = sAlarmType + new String(":读写硬盘出错");break;case 6:sAlarmType = sAlarmType + new String(":遮挡报警");break;case 7:sAlarmType = sAlarmType + new String(":制式不匹配");break;case 8:sAlarmType = sAlarmType + new String(":非法访问");break;}newRow[0] = dateFormat.format(today);// 报警类型newRow[1] = sAlarmType;// 报警设备IP地址sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);newRow[2] = sIP[0];// alarmTableModel.insertRow(0, newRow);break;case HCNetSDK.COMM_UPLOAD_PLATE_RESULT:HCNetSDK.NET_DVR_PLATE_RESULT strPlateResult = new HCNetSDK.NET_DVR_PLATE_RESULT();strPlateResult.write();Pointer pPlateInfo = strPlateResult.getPointer();pPlateInfo.write(0, pAlarmInfo.getByteArray(0, strPlateResult.size()), 0, strPlateResult.size());strPlateResult.read();try {String srt3 = new String(strPlateResult.struPlateInfo.sLicense, "UTF-8");sAlarmType = sAlarmType + ":交通抓拍上传,车牌:" + srt3;} catch (UnsupportedEncodingException e1) {e1.printStackTrace();} catch (Exception e) {e.printStackTrace();}newRow[0] = dateFormat.format(today);// 报警类型newRow[1] = sAlarmType;// 报警设备IP地址sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);newRow[2] = sIP[0];break;case HCNetSDK.COMM_ITS_PLATE_RESULT:HCNetSDK.NET_ITS_PLATE_RESULT strItsPlateResult = new HCNetSDK.NET_ITS_PLATE_RESULT();strItsPlateResult.write();Pointer pItsPlateInfo = strItsPlateResult.getPointer();pItsPlateInfo.write(0, pAlarmInfo.getByteArray(0, strItsPlateResult.size()), 0,strItsPlateResult.size());strItsPlateResult.read();String srt3;try {srt3 = new String(strItsPlateResult.struPlateInfo.sLicense, "UTF-8").trim().substring(1);logger.info("车牌号:" + srt3);} catch (UnsupportedEncodingException e) {e.printStackTrace();}break;case HCNetSDK.COMM_ALARM_ACS: // 门禁主机报警信息try {HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO();strACSInfo.write();Pointer pACSInfo = strACSInfo.getPointer();pACSInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size());strACSInfo.read();// 报警设备IP地址sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);String cardNo = new String(strACSInfo.struAcsEventInfo.byCardNo).trim();String serialNumber = new String(pAlarmer.sSerialNumber).trim();newRow[2] = sIP[0];sAlarmType = sAlarmType + ":门禁主机报警信息,卡号:" + cardNo + ",卡类型:"+ strACSInfo.struAcsEventInfo.byCardType + ",报警主类型:" + strACSInfo.dwMajor + ",报警次类型:"+ strACSInfo.dwMinor + ",设备编号:" + strACSInfo.struAcsEventInfo.byDeviceNo + "远程主机::"+ new String(pAlarmer.byMacAddr) + ",设备ip地址:" + sIP[0] + ",序列号 :" + serialNumber + ",设备名称  :"+ new String(pAlarmer.sDeviceName);logger.info(sAlarmType);if (StringUtils.isNotEmpty(cardNo)) {JSONObject content = new JSONObject();String image = "";if (strACSInfo.dwPicDataLen > 0) {try {long offset = 0;ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen);byte[] bytes = new byte[strACSInfo.dwPicDataLen];// image = new String(bytes, "ISO-8859-1");buffers.rewind();buffers.get(bytes);image = Base64.encodeBase64String(bytes);} catch (Exception e) {logger.error("图片转字节异常", e);}}content.put("deviceIp", deviceIp);content.put("devicePort", devicePort);content.put("cardNo", cardNo);// content.put("serialNumber", serialNumber);content.put("image", image);logger.info("收集信息为:" + content.toJSONString());} else {logger.info("卡号为空, 非管理人员");}} catch (Exception e) {logger.error("门禁主机报警处理异常", e);}break;default:newRow[0] = dateFormat.format(today);// 报警类型newRow[1] = sAlarmType;// 报警设备IP地址sIP = new String(pAlarmer.sDeviceIP).split("\0", 2);newRow[2] = sIP[0];// alarmTableModel.insertRow(0, newRow);logger.info("未找到匹配模式");break;}}}

5.2 创建布防监听

 public void setupAlarmChan() {try {int lAlarmHandle;// 布防句柄HCNetSDK sdk = getSdk();int userId =getlUserID(Ip, Port, DeviceName, DevicePwd);if (userId == -1) {String desc = "注册失败,错误代码:" + sdk.NET_DVR_GetLastError();res.setResult(AlarmResult.RES_LOGIN_FAIL);res.setDescription(desc);logger.info(desc);return res;}AlarmHikFMSGCallBack fMSFCallBack =new AlarmHikFMSGCallBack();Pointer pUser = null;if (!sdk.NET_DVR_SetDVRMessageCallBack_V30(fMSFCallBack, pUser)) {logger.info("设置回调函数失败!");}HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();m_strAlarmInfo.dwSize = m_strAlarmInfo.size();m_strAlarmInfo.byLevel = 1;m_strAlarmInfo.byAlarmInfoType = 1;m_strAlarmInfo.byDeployType = 0;// 客户端布防m_strAlarmInfo.write();lAlarmHandle = sdk.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo);if (lAlarmHandle == -1) {String desc = ("布防失败, 错误代码:" + sdk.NET_DVR_GetLastError());logger.info(desc);} else {String desc = "布防成功";logger.info(desc);}} catch (Exception e) {String desc = "布防处理异常";logger.error(desc, e);}}

未完待续......

海康设备网络SDK java对接相关推荐

  1. 海康设备网络SDK开发NET_DVR_GetDeviceConfig

    由于官方的例子中没有关于NET_DVR_GetDeviceConfig的示例,在此记录一下"NET_DVR_GET_FIELD_DETECTION 获取区域入侵侦测配置" ,避免其 ...

  2. 海康设备通过SDK获取和设置设备网络参数

    目录 1.获取网络相关参数 2.设置网络相关参数 1.获取网络相关参数 //获取设备的网络参数private void getNetCfg(int iUserID) {HCNetSDK.NET_DVR ...

  3. 海康萤石摄像头SDK Java(一)java本地调用摄像头

    本文仅仅实现java 本地调用海康摄像头,后续的视频码解析正在研究. 默认环境: 1.从官网下载好对应OS的SDK. 2.连通摄像头. 3.搭建Java项目,集成sdk中的java demo. 先看效 ...

  4. 海康设备通过SDK获取设备硬件相关参数

    //获取设备的基本参数private void getDevCfg(int iUserID) {HCNetSDK.NET_DVR_DEVICECFG_V40 m_strDeviceCfg = new ...

  5. 基于最新版设备网络SDK集成海康摄像头之Java Demo调试运行教程

    Java Demo运行截图: 由于涉及到空间隐私,部分位置会打码. 设备网络SDK 设备网络SDK是基于硬件的SDK,是基于设备私有网络通信协议开发的,为后端设备(嵌入式网络硬盘录像机.视频服务器). ...

  6. 海康设备对接sdk错误码汇总 v6.0

    海康设备对接sdk错误码汇总 v6.0

  7. 海康设备对接——高抛

    背景:由于工作问题,最近对接了海康的设备网络SDK,参考了SDK自带demo,还有一部分的网上博客,发现没有很全的,自己决定把自己开发的经验分享下 开发环境: 语言:Java 工具:idea 代码: ...

  8. LiveNVR监控流媒体Onvif/RTSP功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像

    LiveNVR功能支持海康摄像头通过海康SDK接入支持回看倍速播放海康设备存储的设备录像 1.流媒体服务说明 2.支持海康SDK接入 3.查看设备录像 3.1.时间轴模式 3.2.列表模式 4.RTS ...

  9. Linux下使用Java调用Hikvision设备网络SDK使用指南

    1 简介  由于在开发过程中,本来以为抓图项目会部署在Windows服务器上,但随着项目的进行发现项目需要部署在Linux系统,甚至是国产化平台银河麒麟上,但在部署时发现在国产化平台部署时出现缺包的问 ...

最新文章

  1. c语言第1章以下说法错误的是,计算机等级考试c语言程序设计习题
  2. python之Scrapy框架的第一个爬虫
  3. 这可能是2018年IT界规模最大的裁员事件了
  4. python 编程一日一练-爱上Python:一日精通Python编程
  5. Hadoop- MapReduce分布式计算框架原理
  6. JavaScript实现k-nearest算法(附完整源码)
  7. SAP UI5 application - model propagation
  8. 宇视硬盘录像机onvif_视频监控系统中强大的录像机,兼容不同品牌,看看有哪些监控厂家...
  9. java 杭电1237简单计算器
  10. 弹框中的elment-form在弹框重新打开后,怎么初始化验证信息
  11. solr html显示,在SOLR中,如何执行索引. html 文件_solr_开发99编程知识库
  12. linux定时执行脚本
  13. 苹果mac休眠快捷键_新手小白用苹果电脑搞科研,学会这些才不至于尴尬!
  14. python相关性分析模型_Python多元线性回归模型,python
  15. iOS App构建版本
  16. 关于服务器基本概念汇总
  17. 支持华为鸿蒙2.0的手机型号是,华为鸿蒙2.0系统支持的手机型号 华为鸿蒙2.0系统详解...
  18. c语言扇形打印图片,怎么做扇形图表?
  19. day inset_SetIP三星网络打印IP设置软件
  20. db2 v11安装

热门文章

  1. 自动提取word文本,并保存到excel
  2. python赋值法例子_大佬们 我是刚开始学python的小白 遇到这种赋值方式 实在不懂这个a+b是赋值给谁的 求解...
  3. 详解+推导 神经网络中的前向传播和反向传播公式(神经网络中的梯度下降)
  4. U盘数据加密--Bitlocker
  5. 2022安全员-C证特种作业证考试题库及答案
  6. 战队口号霸气押韵8字_运动会八字口号押韵有气势 比赛口号简短霸气8字
  7. 带分数 --三种方法详解
  8. 工业控制领域电子元件国产化硬件设计替代解读
  9. 用户和计算机硬件系,什么是计算机硬件?什么是计算机软件,计算机硬件和软件的区别!...
  10. CCProcxy代理服务器的配置使用