使用XMLSocket在Flash和本地程序之间进行通讯

在实际应用中经常会用到flash页面和本地exe程序或者ActiveX程序进行交互的情况。目前有两种方法:

1. flash <-> javascript <-> activex

这种应用中,本地exe程序必须是一个进城外的com控件,不仅制作成本高而且代码间的耦合度高。

2. flash <-> XMLSocket <-> exe

这种应用中,本地exe程序比较独立,flash和exe程序之间可以采用socket通讯的方式进行。本文详述这种方法的实现。

 

既然是Socket通讯,就必须有一个server和一个client。本文采用C#的TCPServer作server端简单范例,其他语言的程序类似。而client端则是flash的XMLSocket应用。

采用这种方法的关键是XMLSocket的安全策略检测。总结一下XMLSocket的安全策略检测,检测过程为:

1,首先检测目标服务器的843端口是否提供安全策略
2,如果843端口没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://) 手段提供安全策略,如果还没检测到,则使用第3步检测

3,检测目标服务器目标端口是否提供安全策略

可以参考这篇文章,有策略检测过程详述及Linux下Python实现的例子。

本文直接采用目标服务器端口提供安全策略的方式。

 

C#服务器端代码:

TCP Server端

代码比较烂,将就看。基本就是echo的功能啦。

实际应用中受到TCPClient连接应该启动工作线程进行实际操作。如果受到的是"<policy-file-request/>/0"策略请求,则工作线程可关闭连接,退出。flash在无论是否收到策略文件,都会关闭当前连接重新建立连接。另外,我在调试时很郁闷的一件事情是:当server端在flash请求策略时停留过长时间,估计也就10秒左右(具体时间没认真看),flash就会抛出SecurityError错误事件。所以尽量不要采用跟踪的调试(可以trace什么的嘛)。

 

再看Flex端代码:

Flex Client

 代码没什么好解释的,很清楚嘛,就这么用。

 

Youtube带exe客户端的上传貌似就用这个做的?总之应用可能比较广啦。

posted @ 2008-08-14 01:19  sayo.net  阅读(1475)  评论(0编辑  收藏  举报