BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #2090同步于 2008/10/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

呼唤大牛:一个关于upnp的问题

lester98
2008/10/30镜像同步2 回复
一:问题关键点 upnp的control point的IUPnPService::InvokeAction Method无法发挥作用,也就是pc无法向board发送包含InvokeAction命令的包。 二:详细情况 1:upnp device 基于intel upnp sdk,代码版本为libupnp-1.3.1 交叉编译运行在板子上,此端工作完全正常,可以初始化upnp sdk,注册一个upnp设备,并且向网络发出广播包以及上传xml文件和网页 2:upnp control poin 基于xp系统,在xp中可以通过安装组件来实现对upnp的支持,可以自动检测到网络上的upnp设备,实际测试中就检测到了开发板,并且出现一个图标,双击图标即可出现控制网页,该网页是pc自动从板子上下载的 3:控制网页 控制网页是用VBScript写的,通过执行VBScript代码来实现控制功能,经过仔细研究,发现该代码各个部分都符合msdn上面对于该问题的说明 控制的过程是这样的,结合实际的代码说明一下 ' ******************************************************** ' 从开发板(upnp device)下载描述文档(xml文件) ' ******************************************************** Dim TvDesc Set TvDesc = CreateObject("UPnP.DescriptionDocument.1") TvDesc.Load("tvdevicedesc.xml") ' ******************************************************** 将下载到的文件的设备设为root设备 ' ******************************************************** Dim TvDevice Set TvDevice = TvDesc.RootDevice ' ******************************************************** ' Attach the event handler to the tv control service ' ******************************************************** Dim TvControlService set TvControlService=TvDevice.Services("urn:upnp-org:serviceId:tvcontrol1") TvControlService.AddCallback GetRef("eventHandler") ' ******************************************************** '输出一些信息,这些信息输出正确,都是开发板上描述文档里描述的信息,所以知道前面的过程都正确进行了 ' ******************************************************** Dim output output = "Found: " & vbCrLf output = output & "DisplayName: " & TvDevice.FriendlyName & vbCrLf output = output & "Type: " & TvDevice.Type & vbCrLf output = output & "UDN: " & TvDevice.UniqueDeviceName & vbCrLf MsgBox output ' ******************************************************** ' 这个是函数,在网页中可以通过按按钮来调用这个函数,错误就出在这里面 一旦调用TvControlService.InvokeAction("PowerOn", inArgs, outArgs)就会发生错误 在浏览器最下端提示“script error”在这句话前面添加输出对话框可以弹出显示,在这句话后面添加 对话框就不能显示,说执行到这句话就停止了 ' ******************************************************** function SetPowerOn() Dim inArgs(0) Dim outArgs(0) ReturnVal=TvControlService.InvokeAction("PowerOn", inArgs, outArgs) end function 三:分析 因为执行到一句话就出现script error,所以感觉错误应该是出在网页的代码上,但是对比msdn 所给的例子http://msdn.microsoft.com/en-us/library/aa381135(VS.85).aspx,感觉完全类似, 感觉不到这里有什么错误 事实上,执行了这个网页,pc开始从board下载了一些东西,这些东西也可以读出来,但是一旦调用 InvokeAction,想向board回送些信息,对board进行控制,那么pc没有任何包送出去,难道是pc这边的upnp的 问题吗?在/windows/system32里可以找到upnp.dll等三个dll文件,进行字符串查找,发现里面也确实有InvokeAction, 但是,为什么script里面的TvControlService.InvokeAction("PowerOn", inArgs, outArgs)就无法执行并且发生错误呢?
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
hobby机器人#1 · 2008/10/31
抓包看看?不懂的瞎说 搬凳子都大牛……
lester98机器人#2 · 2008/10/31
【 在 hobby 的大作中提到: 】 : 抓包看看?不懂的瞎说 : 搬凳子都大牛…… 根本就没有包发回来,有包就不会有问题了