海康威视提供的ipserver可以记录DVR设备的IP地址,并提供一个7071的端口给客户端查询用,我们在c#程序中可以用海康SDK包中的NET_DVR_GetDVRIPByResolveSvr函数来查询,程序中对这个函数的声明为:
// 通过解析服务器,获取设备的动态IP地址
[DllImport("HCNetSDK.dll")]
public static extern bool NET_DVR_GetDVRIPByResolveSvr(string sServerIP, ushort wServerPort, string sDVRName, ushort wDVRNameLen, string sDVRSerialNumber, ushort wDVRSerialLen, IntPtr pGetIP);
实际调用时对最后的参数 pGetIP要先声明一个IntPtr的变量,并分配一个非托管内存后传入:
IntPtr ptr = Marshal.AllocHGlobal(32);
函数调用后再从非托管内存中取出内容:
return Marshal.PtrToStringAnsi(ptr);
即可获得设备IP地址。
还要注意参数 ushort wDVRNameLen,如果参数string sDVRName中包含中文,则要计算字节数而不是字数,如一个汉字要算2个字节的长度,如(ushort)(Encoding.Default.GetByteCount(deviceName))。