背景
最近在做网络摄像头(IPC、IPCam)方面的集成开发工作。因为项目的需求,要对接不同厂商的网络摄像头、安防摄像头等产品。
其中会涉及到一个ONVIF协议,这是个Web Service协议,其中一个接口就是Web Service Discover,也就是发现和侦测网络中有哪些可用的网络服务。
简单点说,就是往网络里面发送一个广播或者组播信息,然后其它设备或者服务器收到之后就返回一个响应,把服务接口信息反馈回来。
一、问题和现象
但是在开发测试的时候发现一个问题,发出去的组播信息无法被设备接收到,设备发出来的组播信息也无法被接收到。但是用另外一个官方的设备检测工具,可以探测出网络设备。
二、原因分析因为别人家的软件能用,自己做的不能用。所以第一种想到的可能是,发送的信息不正确,导致摄像头拒绝返回信息。测试方法:本人用wireshark抓包,把能够正常探测服务和设备的那个软件发出去的所有信息都捕获出来,发现跟本人发送的内容一样的。
结论:发送的数据没问题
第二种可能,就是发送的探测信息没有发送到相应的设备和服务那里,对方收不到自然就不会返回信息了。测试方法:在自己的代码里面开两个线程,这两个线程同时加入到一个广播组里面。一个发送一个接收。
结论:线程A发送出去的信息,能被线程B接收,证明是有发出去的。
那就剩下一种可能了,就是信息已经在程序中发出去了,但是在网络中并没有传达到其它设备那里。因为别人家的设备可以发送,那就首先排除了是系统防火墙、杀毒软件、路由器、交换机等原因。问题应该是在本机上。
然后想到本机上有两个网卡