Go语言实现Onvif客户端:10、获取网关地址及设置网关地址

Go语言实现Onvif客户端:10、获取网关地址及设置网关地址


1. 前言

之前第4节配置网络信息中开源库中通过device的能力可以配置ip地址(https://blog.csdn.net/weixin_39510813/article/details/115332392),但是没有设置网关地址,实际配置过程中往往是ip地址和网关一起配置的,所以算是漏掉了这部分内容,这里补充一下,顺便说一下我们如何查看onvif标准设备提供的设备能力。

2. 确认onvif设备提供的能力

http://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl

通过上述的wsdl文件(相当于c/c++中的接口库头文件,我们通过头文件可以知道该库提供哪些接口)我们可以确认标准onvif设备提供的设备控制能力,通过关键词搜索是否有我们需要的能力,比如我们这里需要的配置网关地址的能力:

获取网关地址:

在这里插入图片描述

设置网关地址:

在这里插入图片描述

3. 部分代码

那么增加接口进行网关地址获取和设置即可:

func (client *GoOnvifClient) getGateWayAddress() ReturnInfo {
    getGateWayAddressReq := device.GetNetworkDefaultGateway{}

    res := client.sendReqGetResp(GetGateWayAddressErr, getGateWayAddressReq)
    return res
}

func (client *GoOnvifClient) setGateWayAddress() ReturnInfo {
    setGateWayAddressReq := device.SetNetworkDefaultGateway{
        IPv4Address: onvif.IPv4Address(client.netWorkConfigInfo.IPV4GateWayAddress),
        IPv6Address: onvif.IPv6Address(client.netWorkConfigInfo.IPV6GateWayAddress),
    }

    res := client.sendReqGetResp(ConfigGateWayAddressErr, setGateWayAddressReq)
    return res
}

res, err = client.GetGateWayAddress()
fmt.Println(res)

//设置网络信息
networkInfo := &onvifClient.NetWorkConfigInfo{
	EnableIPV4NetworkConfig: true,
	IPV4Address:             "40.40.40.101",
	IPV4PrefixLen:           24,
	EnableIPV6NetworkConfig: false,
	IPV6Address:             "",
	IPV6PrefixLen:           120,
	IPV4GateWayAddress:      "40.40.40.100",
}
res, err = client.ConfigNetWork(networkInfo)
if err != nil {
	logger.Error(res)
} else {
	fmt.Println(networkInfo.IPV4Address)
}

4. 最后

实际上我感觉onvif论坛应该更新一下现有的web services框架,不要再使用soap协议了,这个协议框架太麻烦了而且基本被淘汰了,这导致我们通过onvif对接设备时由于这个框架变的比较麻烦;实际原理并不复杂,设备作为一个web server,通过soap协议提供设备能力接口,客户端通过soap协议发送对应的请求实现对应功能,但是soap框架让这个简单的请求过程变得复杂了,如果能使用更简单的协议方式恐怕onvif会更加普及。

协议的复杂性也很影响产品的推广和普及,因此好的协议设计和接口文档也是开发非常重要的一环。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现一个 C# 的 Onvif 客户端,你需要遵循以下步骤: 1. 引用 Onvif 标准的 WSDL 文件 Onvif 标准定义了一组 Web Services Description Language (WSDL) 文件,你需要将这些文件添加到你的 C# 项目中。这些文件包含了 Onvif 标准所定义的服务接口和数据类型。 2. 生成客户端代理类 使用 Visual Studio 或者命令行工具,基于 WSDL 文件生成客户端代理类,这样你就可以使用 C# 代码调用 Onvif 标准定义的服务接口。 3. 创建客户端对象 使用生成的客户端代理类创建客户端对象,你需要提供 Onvif 设备的 IP 地址、端口号、用户名和密码等信息。 4. 调用服务接口 使用客户端对象调用 Onvif 标准定义的服务接口,例如获取设备信息、控制云台、获取视频流等操作。 下面是一个简单的示例代码,演示了如何使用 C# 实现 Onvif 客户端: ```csharp using System; using System.ServiceModel; using onvif.services; namespace onvif_client { class Program { static void Main(string[] args) { // Onvif 设备的 IP 地址、端口号、用户名和密码 string address = "http://192.168.1.100/onvif/device_service"; string username = "admin"; string password = "admin"; // 创建服务绑定和客户端对象 var binding = new BasicHttpBinding(); var endpoint = new EndpointAddress(address); var client = new DeviceClient(binding, endpoint); // 设置验证凭据 client.ClientCredentials.UserName.UserName = username; client.ClientCredentials.UserName.Password = password; try { // 调用服务接口 var response = client.GetDeviceInformation(new GetDeviceInformationRequest()); // 打印设备信息 Console.WriteLine("Manufacturer: {0}", response.Manufacturer); Console.WriteLine("Model: {0}", response.Model); Console.WriteLine("Serial Number: {0}", response.SerialNumber); } catch (Exception ex) { Console.WriteLine("Error: {0}", ex.Message); } finally { // 关闭客户端 client.Close(); } } } } ``` 以上示例代码演示了如何使用 Onvif 标准定义的 GetDeviceInformation 接口获取设备信息。你可以根据需要调用其他的服务接口,实现更加复杂的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称系统有问题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值