Onvif 设备发现的多网卡选择问题

经历了千辛万苦的尝试,原来onvif上处理多网卡的选择是如此简单,soap的设计早就考虑好了此问题。

苦水不多说了,步骤如下:

1、获取本机的各网卡的IP地址。

      在网上看见讲得比较多的方法有两个。

      一是将ipconfig  /all的运行结果保存到文件,然后分析出各IP地址。但是我实操时遇到了操作系统的语言问题。我测试了三台电脑,一台回复全英文的,一台回复中英文结合的,装了繁体系统的那台返回英文和繁体结合的。想不到如何处理,于是放弃了本方法。希望各大牛能告诉我他们的处理方法。

       第二种方法是通过gethostname,加gethostbyname这两个库函数组合获取各网卡的IP地址。我选用就是此方法的,在这里我就不列举我的具体做法了,感觉处理得不太好,给献丑了,网上例子也不少。此方法可以获取到AF_INET和IF_INET6的地址,并且很好地排除了工作站上那些“bluetooth 网络”等不关心的网卡。

 

2、在soap中设置IP地址

         只要设置好soap的ipv4_multicast_if参数,一切就由soap内部搞定了。很简单吧。

	struct in_addr if_req;
	if_req.s_addr = inet_addr("xxx.xxx.xxx.xxx");  // 想绑定的IP地址
	soap.ipv4_multicast_if = (char*)soap_malloc(&soap, sizeof(in_addr));
	memset(soap.ipv4_multicast_if, 0, sizeof(in_addr));
	memcpy(soap.ipv4_multicast_if, (char*)&if_req, sizeof(if_req));</SPAN>

     我是在设定setsockopt的IP_ADD_MEMBERSHIP参数,即加入组播后设定以上参数的。

总结:要不是偶然看见了soap结构中有此参数,可能我还没能从解决问题的苦海中解放出来。看来必须再好好研究soap的结构了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值