最近在解决UPnP的问题。
问题阐述:
通过Intel SDK igd 在路由器上打洞,实现P2P功能。现在情况,设备启动后可以在路由器上打洞,但是当路由器重启后,UPnP端口就不能打通了。
分析:
UPnP中有三种事物:设备,控制点,服务。
打洞这个动作使我的Camera(控制点)发起的,这里路由器是设备。
1。在路由器重启之前,可以打通端口。
2。路由器重启之后,不可以打通,通过抓包发现,Camera的一直在订约路由器的事件。也有过打洞的操作,但是没有成功。
3。这种情况可以概括为:网络中两台设备A,B建立连接,突然有一个B设备断电,没有正常的断开过程,A以为自己还和B维持通信,而B并不这么认为。
怎么办呢? A设备维护一个设备列表,但是不知道B已经断开网络,收到B的Notify的时候还以为B存在的。怎么解决呢?
解决办法:
Debug, 打印需要的信息。
WireShark 抓包,对照Code流程,尤其是打洞原理。
结论:
路由器问题,通过GetSpecificPortMapping 我们得到了我们想要添加到IGD设备上的端口,但是路由器自己不起作用,是路由器的问题。