<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[专注于Flash RIA与网络游戏开发 - ActionScript]]></title>
<link>http://www.sujun.org/</link>
<description><![CDATA[弃天笑的小窝]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[sujun10@21cn.com(弃天笑)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>专注于Flash RIA与网络游戏开发</title> 
	<url>http://www.sujun.org/images/logos.gif</url> 
	<link>http://www.sujun.org/</link> 
	<description>专注于Flash RIA与网络游戏开发</description> 
</image>

			<item>
			<link>http://www.sujun.org/default.asp?id=52</link>
			<title><![CDATA[[AS3]Class小技巧：程序自动让对象向下转换]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sat,07 Aug 2010 18:05:47 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=52</guid>	
		<description><![CDATA[这个是一个比较方便的技巧，在实现一些自动化框架的编码中，可能会比较常用到。就是通过框架传递过来的参数，一般都是传递对象的接口或者父类，然后再传到对应的方法中，再采用强制性转换之后，再使用。<br/>例如我个人写网络通讯框架中，所有接受的数据都实现了IRead接口，所以回调函数接受的参数是IRead接口，我为了减少强制转换的麻烦，就在网络底层写了个自动强制向IRead的不同实现类作类型转换。这样在不同的接收方法那里可以声明自己想要的实际参数对象啦~<br/>下面是简单的代码例子<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&nbsp;*&nbsp;@UseAsClass.as<br/>&nbsp;*&nbsp;<br/>&nbsp;*&nbsp;@author&nbsp;sodaChen&nbsp;mail:sujun10@21cn.com<br/>&nbsp;*&nbsp;@version&nbsp;1.0<br/>&nbsp;*&nbsp;&lt;br&gt;Copyright&nbsp;(C),&nbsp;2010&nbsp;asFrame.com<br/>&nbsp;*&nbsp;&lt;br&gt;This&nbsp;program&nbsp;is&nbsp;protected&nbsp;by&nbsp;copyright&nbsp;laws.<br/>&nbsp;*&nbsp;&lt;br&gt;Program&nbsp;Name:AsFrame<br/>&nbsp;*&nbsp;&lt;br&gt;Date:2010-8-7<br/>&nbsp;*/<br/>package<br/>{<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.display.MovieClip;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.display.Sprite;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.utils.getDefinitionByName;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.utils.getQualifiedClassName;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;AS中的Class类的妙用<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@author&nbsp;sodaChen<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@Date:2010-8-7<br/>&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;UseAsClass&nbsp;extends&nbsp;Sprite<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;UseAsClass()<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;super();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//声明一个mc实例<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;sprite:Sprite&nbsp;=&nbsp;new&nbsp;MovieClip();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//调用setSprite方法,直接把sprite传递进去,因为MovieClip是Sprite的子类<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setSprite(sprite);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//接下来调用setMovie,这是直接传递sprite编译器是会出错的，因为声明类型的时候，是以mc的父类Sprite声明<br/>//&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setMovie(sprite);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//所以这里必须强制转换成mc<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setMovie(MovieClip(sprite));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//这里有个问题，如果编写一个通过框架，或者在特殊情况下，不能程序员手工编写类型转换的情况下，<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//需要程序自动进行类型转换该怎么实呢？这里就采用到了Class对象的小技巧了就可以实现了<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;classPath:String&nbsp;=&nbsp;getQualifiedClassName(sprite);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;mcClass:Class&nbsp;=&nbsp;getDefinitionByName(classPath)&nbsp;as&nbsp;Class;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setAutoMovie(mcClass(sprite));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//接受Sprite参数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;setSprite(sprite:Sprite):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;直接传递父类对象&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//接受MovieClip的参数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;setMovie(movie:MovieClip):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;程序手工编码向下转换类型&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//接受MovieClip的参数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;setAutoMovie(movie:MovieClip):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;程序自动向下转换类型!&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=51</link>
			<title><![CDATA[Flash Socket的基本通讯协议流程例子]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sun,25 Jul 2010 16:20:52 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=51</guid>	
		<description><![CDATA[如蒙转载，请注明文章出处：www.sujun.org&nbsp;&nbsp;&nbsp;作者：弃天笑<br/><br/>这个例子是7月24日&nbsp;•&nbsp;广州&nbsp;•&nbsp;东方国际饭店的Flash技术交流会演讲那天的例子，现在传到blog上，让有需要的人去下载。不过后来发现大家比较感兴趣的，不是具体的通讯协议，而且一些关于通讯的各种技术解决问题。呵呵。希望有继续可以和大家继续交流。大家共同前进。而我自己以后也会陆续贴出自己工作上遇到的问题（例如我自己现在webgame服务器方面的）<br/><br/>不过这篇例子是比较简单的通讯协议了，客户端和服务端都是采用最基础的一个一个数据地发送，也是一个一个地接受(采用&nbsp;len&nbsp;+&nbsp;cmd&nbsp;+&nbsp;body)的方式。之后也会推出增加AMF3，以及自动解析的一些例子啦。<br/>例子运行图片<br/><img src="http://www.sujun.org/attachments/month_1007/j201072516183.jpg" border="0" alt=""/><br/>下面是贴一下简单的代码<br/>Flash端发送登陆数据<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连接成功,进行发送数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;byteArray:ByteArray&nbsp;=&nbsp;new&nbsp;ByteArray();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//登陆消息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;byteArray.writeShort(LOGIN);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;byteArray.writeUTF(userName);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.writeShort(byteArray.length);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.writeBytes(byteArray);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.flush();<br/></div></div><br/>接下来是java端对应的接受数据<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读出开头长度的short（2个字节）<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;len&nbsp;=&nbsp;input.readShort();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//读出len之后，接着是读取short类型的cmd（2个字节）<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;short&nbsp;cmd&nbsp;=&nbsp;input.readShort();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取用户名<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;String&nbsp;userName&nbsp;=&nbsp;input.readUTF();<br/></div></div><br/>其他具体的就不说了，看例子。当然还是会有很多其他的问题，例如怎么做整体的网络通讯框架，如何提高开发效率和性能，等等很多问题。不过这些都是可以一一解决的，希望大家可以深入了解，一起进步<br/><br/>最后，是下载整个例子的客户端和服务端的源码<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_1007/d2010725161553.rar" target="_blank">点击下载此文件</a><br/><br/>ppt文件(ppt很简陋，主要的东西，都是在demo了，研究代码就可以啦:)<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_1007/p2010725163844.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=39</link>
			<title><![CDATA[[as3]Flash自动进入方便面三国游戏]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Wed,12 Nov 2008 11:44:03 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=39</guid>	
		<description><![CDATA[之前有一段时间在玩webgame，本来打算看能不能看发出简单的外挂，让自己玩游戏玩得更简单些，可惜没时间，最终只是用flash开发了一个账号登陆器，就是预先存多个账号，然后选择对应的账号，就会登陆到游戏里面,绕过每次输入帐户密码的过程。<br/>下面发送的是根据账号自动登陆的flash，把生成出来的gameurl复制到浏览器上，就可以马上进去游戏了<br/>演示flash:<br/><img src="http://www.sujun.org/attachments/month_0811/42008111212914.jpg" border="0" alt=""/><br/><br/>接下是简单的原理说明:其实就是利用Flash去请求网页，然后解析网页返回的数据，提取出自己所需要的数据，然后再进一步请求页面，如此反复而已：<br/><img src="http://www.sujun.org/attachments/month_0811/020081112113826.jpg" border="0" alt=""/><br/><br/>再接下来就是代码的简单说明了<br/>这是初始函数<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;程序入口<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@author&nbsp;弃天笑<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@date&nbsp;2008.06.10<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;System.useCodePage&nbsp;=&nbsp;true;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//获取登陆首页数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader&nbsp;=&nbsp;new&nbsp;URLLoader();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request&nbsp;=&nbsp;new&nbsp;URLRequest();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestEsate&nbsp;=&nbsp;&#34;fmbMain&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://baidu.51wan.com/login_51wan.php?game=fbmsg" target="_blank">http://baidu.51wan.com/login_51wan.php?game=fbmsg</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.method&nbsp;=&nbsp;URLRequestMethod.POST;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.addEventListener(Event.COMPLETE,onLoader);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;serverList.dataProvider&nbsp;=&nbsp;boxData;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loginBtn.enabled&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;copyBtn.enabled&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nameText.text&nbsp;=&nbsp;&#34;sujun.org&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;passText.text&nbsp;=&nbsp;&#34;123456&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//进行登陆请求,分析出必须的参数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameFind:String&nbsp;=&nbsp;&#34;test.setAttribute(&#39;name&#39;,&#39;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idName:String&nbsp;=&nbsp;getStringValue(contents,idNameFind,&#34;&#39;)&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;timestampValue:String&nbsp;=&nbsp;getStringValue(contents,&#34;&#39;timestamp&#39;).value=&#39;&#34;,&#34;&#39;;&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;signValue:String&nbsp;=&nbsp;getStringValue(contents,&#34;(&#39;sign&#39;).value=&#39;&#34;,&#34;&#39;;&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//加入参数,分析页面代码<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;variables:URLVariables&#160;&#160;&#160;&#160;=&nbsp;new&nbsp;URLVariables();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[idName]&nbsp;=&nbsp;idName;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;timestamp&#34;]&nbsp;=&nbsp;timestampValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;sign&#34;]&nbsp;=&nbsp;signValue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;dontup&#100;ateagain&#34;]&nbsp;=&nbsp;&#34;dont&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;gamename&#34;]&nbsp;=&nbsp;&#34;fbmsg&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;username&#34;]&nbsp;=&nbsp;nameText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;variables[&#34;password&#34;]&nbsp;=&nbsp;passText.text;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//进行登陆连接<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;requestEsate&nbsp;=&nbsp;&#34;login&#34;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;LOGIN_URL;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.data&nbsp;=&nbsp;variables;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/></div></div><br/>这一段是解析登陆页面的一些数据，例如解析出页面包含的验证码什么的<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>//根据从字符串中取出所需的数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;getStringValue(contents:String,findStr:String,endSign:String):String<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameFind:String&nbsp;=&nbsp;findStr;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameStart:int&nbsp;=&nbsp;contents.indexOf(idNameFind);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idNameEnd:int&nbsp;=&nbsp;contents.indexOf(endSign,idNameStart);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;idName:String&nbsp;=&nbsp;contents.substring(idNameStart&nbsp;+&nbsp;idNameFind.length,idNameEnd);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;idName;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/></div></div><br/><br/>全部代码就不贴出来了，大家可以把代码下载下去，用flex编译一下就可以运行看到效果了<br/>代码下载:<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0811/c20081112114241.rar" target="_blank">点击下载此代码</a>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=33</link>
			<title><![CDATA[[AS3]registerClassAlias的用法]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Thu,31 Jul 2008 22:30:16 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=33</guid>	
		<description><![CDATA[registerClassAlias在利用AMF3进行序列话网络通讯中，是非常有用的。需要把客户端的对象直接传送到服务器得时候，保留该对象的类（类型）。&nbsp;这样的话，就可以传送自定义对象或者系统自带对象。<br/>具体的使用方法，官方有详细地用法。这里我只说说自己的一些理解。<br/>readObject方法对构造器有参数的类，是会出错的，会弹出参数数量不匹配这个错误。因为还原对象进行反射的时候，是默认没有参数的给构造器的。这也是有些人&nbsp;讨论Sprite等对象不能进行深度拷贝的原因<br/>所以在使用AMF3进行序列话的时候要注意这个了，还有一个就是，如果那个类包含了多个类，也就是个复合类，那么里面的那个复合类，也必须进行registerClassAlias，例如<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package<br/>{<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.geom.Point;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;Test<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;var&nbsp;name:String;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;var&nbsp;point:Point;<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/>这样需要写两条语句才能完全把Test序列化<br/>registerClassAlias(&#34;point&#34;,Point);<br/>registerClassAlias(&#34;test&#34;,Test)<br/><br/>此示例使用&nbsp;registerClassAlias()&nbsp;函数为&nbsp;ExampleClass&nbsp;注册一个别名&nbsp;(&nbsp;com.example.eg&nbsp;)。&nbsp;由于为类注册了别名，因此可以将对象作为&nbsp;ExampleClass&nbsp;的实例反序列化，且代码将输出&nbsp;true。&nbsp;如果删除&nbsp;registerClassAlias()&nbsp;调用，则代码将输出&nbsp;false<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.display.Sprite;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.net.registerClassAlias;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.utils.ByteArray;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;RegisterClassAliasExample&nbsp;extends&nbsp;Sprite&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;RegisterClassAliasExample()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;registerClassAlias(&#34;com.example.eg&#34;,&nbsp;ExampleClass);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eg1:ExampleClass&nbsp;=&nbsp;new&nbsp;ExampleClass();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ba:ByteArray&nbsp;=&nbsp;new&nbsp;ByteArray();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ba.writeObject(eg1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ba.position&nbsp;=&nbsp;0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;eg2:*&nbsp;=&nbsp;ba.readObject();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(eg2&nbsp;is&nbsp;ExampleClass);&nbsp;//&nbsp;true<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>class&nbsp;ExampleClass&nbsp;{}<br/></div></div><br/>具体使用例子，参考官方例子，下面是摘录出来的<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=32</link>
			<title><![CDATA[[AS3]Flash Socket底层接受数据的初级处理]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sun,29 Jun 2008 11:47:15 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=32</guid>	
		<description><![CDATA[用flash去开发应用，，免不了网络通讯，特别是网络游戏，需要用到即使通讯。<br/>as3提供了两个支持即时通讯的类:XMLSocket和Socket，前者其实是只支持发送字符串，而后者就强大多了，支持发送字节，相对来说比较底层，而这也给我们更多的发挥空间。<br/>其实，flash&nbsp;socket的网络底层接受数据，就以与C++服务器通讯为例子，C++服务器一般会发一段一段数据过来，每段数据都是由一定结构组成的，一般是消息头和消息头，然后再逐步分层解析。<br/>在这里，我只说接受网络底层的处理，一般一段数据前面，还有有一个4个字节左右的数据，表示的是后面网络流里的数据有多少....<br/>看下简单示意图<br/><img src="http://www.sujun.org/attachments/month_0806/o2008629113148.jpg" border="0" alt=""/><br/>我们网络底层需要做的处理，就是根据头4个字节判断出后面的数据大小，然后把那一整块取出来，抛给上层解析，然后又在不停地侦听，收到指定大小之后，又做类似的操作，下面看详细的代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&nbsp;*&nbsp;@(#)NetBottomHandle.as<br/>&nbsp;*&nbsp;@author&nbsp;soda.C&nbsp;&nbsp;mail:sujun10@21cn.com<br/>&nbsp;*&nbsp;@version&nbsp;&nbsp;1.0<br/>&nbsp;*&nbsp;&lt;br&gt;Copyright&nbsp;(C),&nbsp;2007&nbsp;soda.C<br/>&nbsp;*&nbsp;&lt;br&gt;This&nbsp;program&nbsp;is&nbsp;protected&nbsp;by&nbsp;copyright&nbsp;laws.<br/>&nbsp;*&nbsp;&lt;br&gt;Program&nbsp;Name:GameHall<br/>&nbsp;*&nbsp;@data&nbsp;2008-3-20<br/>&nbsp;*/<br/>package&nbsp;o&#114;g.sujun.net&nbsp;<br/>{<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.net.Socket;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.events.ProgressEvent;<br/>&#160;&#160;&#160;&#160;import&nbsp;flash.utils.ByteArray;<br/>&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;socket数据流里的底层处理,从这里接受到服务器的数据,满足条件后就会抛出需要的字节<br/>&#160;&#160;&#160;&#160;&nbsp;*&nbsp;对数据流的数据,不做任何处理<br/>&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;NetBottomHandle&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;socket&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:Socket;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;listener&#160;&#160;&#160;&#160;:Function;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//接受网络解析出来的数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;msgLen&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:int;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//消息长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;msgLenMax&#160;&#160;&#160;&#160;:int;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//收到的消息最大长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;headLen&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:int;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//消息头长度<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;isReadHead&#160;&#160;&#160;&#160;:Boolean;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//是否已经读了消息头<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;bytes&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;:ByteArray;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//所读数据的缓冲数据，读出的数据放在这里<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;NetBottomHandle()<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;msgLenMax&nbsp;=&nbsp;5000;&#160;&#160;&#160;&#160;//5000字节<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;headLen&nbsp;=&nbsp;4;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//4个字节<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bytes&nbsp;=&nbsp;new&nbsp;ByteArray();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;设置一个网络通讯实例<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/&nbsp;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;setSocket(socket:Socket):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.socket&nbsp;=&nbsp;socket;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//监听......<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.addEventListener(ProgressEvent.SOCKET_DATA,&nbsp;onServerData,false,0,true);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;接受在网络层里收到的原始数据,传递过来的数据为描述长度,以及ByteArray对象functon(len,bytes)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;@param&nbsp;listener:接受数据函数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;receiverNetData(listener:Function):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;this.listener&nbsp;=&nbsp;listener;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;服务器发送过来的数据都在这里接收,最底层的<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;onServerData(event:ProgressEvent):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//一有收到数据的事件，就通过这个函数进行检验<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;parseNetData();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/**<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*&nbsp;解析网络数据流<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;*/<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;parseNetData():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果需要读信息头<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(isReadHead)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(socket.bytesAvailable&nbsp;&gt;=&nbsp;headLen)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//读出指示后面的数据有多大<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;msgLen&nbsp;=&nbsp;socket.readUnsignedInt();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isReadHead&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果已经读了信息头,则看能不能收到满足条件的字节数<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!isReadHead&nbsp;&amp;&amp;&nbsp;msgLen&nbsp;&lt;=&nbsp;msgLenMax)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果为0,表示收到异常消息<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(msgLen&nbsp;==&nbsp;0)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//一般消息长度为0的话，表示与服务器出了错，或者即将被断开等，通知客户端，进行特别处理<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;listener(msgLen,null);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&nbsp;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//数据流里的数据满足条件，开始读数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(socket.bytesAvailable&nbsp;&gt;=&nbsp;msgLen)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//指针回归<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;bytes.position&nbsp;=&nbsp;0;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//取出指定长度的网络字节<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;socket.readBytes(bytes,&nbsp;0,&nbsp;msgLen);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;listener(msgLen,bytes);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;isReadHead&nbsp;=&nbsp;false;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//如果数据流里还满足读取数据条件，继续读取数据<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(socket.bytesAvailable&nbsp;&gt;=&nbsp;headLen)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;parseNetData();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/>代码我就不详细解说了，注释得很清楚，这段代码也是经过我写过几个版本锤炼过的。呵呵<br/>在实际应用中，表现也是比较稳定的<br/>当然，这是比较早期的了，以后再正正应用中，可能还需要做更多的处理，例如每个网络字节的缓冲，缓存等，以免过多字节造成socket出错等等<br/>希望有兴趣的人继续留贴讨论，呵呵<br/><br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0806/u2008629114938.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=31</link>
			<title><![CDATA[[AS3]Flash多国语言自由切换]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Thu,26 Jun 2008 21:49:37 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=31</guid>	
		<description><![CDATA[为了让应用面向世界化，让系统具备多语言，是必备的条件。<br/>本演示程序是个简单的多语言演示系统，具备即使切换各国语言得特点，程序使用的显示文字采用xml文件配置，从而达到不用语言的效果,看flash效果<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp79487_href" href="http://www.sujun.org/javascript:MediaShow('swf','temp79487','attachments/month_0806/f200862621410.swf','400','300')"><img name="temp79487_img" src="http://www.sujun.org/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp79487_text">在线播放</span></a><div id="temp79487"></div></div></div><br/>如果打不开或者没效果，请点击下面连接地址:<br/><br/><a target="_blank" href="http://www.sujun.org/flash/languages/languages.html">http://www.sujun.org/flash/languages/languages.html</a><br/><br/>看了效果，就说一下原理，其实很简单，就是程序中需要用到的每一个文字，都是读取xml配置文件得，在各个语言版本的xml配置文件中，都保持着相同的key，但是其中的vlaue就不相同<br/><br/>先看下中文配置<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;UTF-8&#34;?&gt;<br/>&lt;languages&nbsp;type=&#34;China&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;text-content&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;cnBtn&#34;&nbsp;&gt;中文&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;enBtn&#34;&nbsp;&gt;英文&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;loginBtn&#34;&nbsp;&gt;登陆&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Label&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;nameLabel&#34;&nbsp;&gt;名&nbsp;&nbsp;称:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;passLabel&#34;&nbsp;&gt;密&nbsp;&nbsp;码:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Label&gt;<br/>&#160;&#160;&#160;&#160;&lt;/text-content&gt;<br/>&lt;/languages&gt;<br/></div></div><br/>英文版配置文件<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;UTF-8&#34;?&gt;<br/>&lt;languages&nbsp;type=&#34;English&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;text-content&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;cnBtn&#34;&nbsp;&gt;China&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;enBtn&#34;&nbsp;&gt;English&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;loginBtn&#34;&nbsp;&gt;Login&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Button&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;Label&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;nameLabel&#34;&nbsp;&gt;UserName:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;value&nbsp;key=&#34;passLabel&#34;&nbsp;&gt;Userpass:&lt;/value&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;/Label&gt;<br/>&#160;&#160;&#160;&#160;&lt;/text-content&gt;<br/>&lt;/languages&gt;<br/></div></div><br/>可以看到这两个文件在文件中的&lt;value&nbsp;key=&#34;nameLabel&#34;&nbsp;&gt;UserName:&lt;/value&gt;，保持着相同的key，但是值就不一样<br/><br/>接下来看界面程序<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;utf-8&#34;?&gt;<br/>&lt;mx:Application&nbsp;xmlns:mx=&#34;<a href="http://www.adobe.com/2006/mxml" target="_blank">http://www.adobe.com/2006/mxml</a>&#34;&nbsp;layout=&#34;vertical&#34;&nbsp;fontFamily=&#34;Arial&#34;&nbsp;fontSize=&#34;12&#34;<br/>&#160;&#160;&#160;&#160;&nbsp;creationComplete=&#34;init()&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;![CDATA[<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;import&nbsp;o&#114;g.sujun.lang.LangManager;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;loader:URLLoader;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;request:URLRequest;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;currLang:String;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Security.allowDomain(&#34;*&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//默认加载中文<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;currLang&nbsp;=&nbsp;&#34;<a href="http://www.sujun.org/flash/languages/languages/china.xml" target="_blank">http://www.sujun.org/flash/languages/languages/china.xml</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader&nbsp;=&nbsp;new&nbsp;URLLoader();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request&nbsp;=&nbsp;new&nbsp;URLRequest(currLang);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;enBtn.addEventListener(MouseEvent.CLICK,buttEvent);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cnBtn.addEventListener(MouseEvent.CLICK,buttEvent);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.addEventListener(Event.COMPLETE,onLoadXml);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;buttEvent(event:MouseEvent):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//根据按钮确定加载那个语言配置文件<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(event.target&nbsp;==&nbsp;enBtn)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://www.sujun.org/flash/languages/languages/English.xml" target="_blank">http://www.sujun.org/flash/languages/languages/English.xml</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;request.url&nbsp;=&nbsp;&#34;<a href="http://www.sujun.org/flash/languages/languages/china.xml" target="_blank">http://www.sujun.org/flash/languages/languages/china.xml</a>&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.load(request);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;onLoadXml(event:Event):void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;加载成功&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LangManager.instanceLang(XML(loader.data));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//初始化文字<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;enBtn.label&nbsp;=&nbsp;LangManager.getContent(&#34;enBtn&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cnBtn.label&nbsp;=&nbsp;LangManager.getContent(&#34;cnBtn&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loginBtn.label&nbsp;=&nbsp;LangManager.getContent(&#34;loginBtn&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//文本<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nameLabel.text&nbsp;=&nbsp;LangManager.getContent(&#34;nameLabel&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;passLabel.text&nbsp;=&nbsp;LangManager.getContent(&#34;passLabel&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;]]&gt;<br/>&#160;&#160;&#160;&#160;&lt;/mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Panel&nbsp;width=&#34;375&#34;&nbsp;height=&#34;374&#34;&nbsp;layout=&#34;absolute&#34;&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;x=&#34;65&#34;&nbsp;y=&#34;57&#34;&nbsp;label=&#34;Button&#34;&nbsp;id=&#34;enBtn&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;x=&#34;158&#34;&nbsp;y=&#34;57&#34;&nbsp;label=&#34;Button&#34;&nbsp;id=&#34;cnBtn&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Label&nbsp;x=&#34;65&#34;&nbsp;y=&#34;122&#34;&nbsp;text=&#34;Label&#34;&nbsp;id=&#34;nameLabel&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Label&nbsp;x=&#34;65&#34;&nbsp;y=&#34;158&#34;&nbsp;text=&#34;Label&#34;&nbsp;id=&#34;passLabel&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:TextInput&nbsp;x=&#34;137&#34;&nbsp;y=&#34;122&#34;&nbsp;id=&#34;nameText&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:TextInput&nbsp;x=&#34;137&#34;&nbsp;y=&#34;156&#34;&nbsp;id=&#34;passText&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;x=&#34;137&#34;&nbsp;y=&#34;210&#34;&nbsp;label=&#34;Button&#34;&nbsp;id=&#34;loginBtn&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;/mx:Panel&gt;<br/>&lt;/mx:Application&gt;<br/><br/></div></div><br/><br/>代码很简单.....就是点击不同按钮，加载不同的xml配置文件，然后初始化文字信息。<br/>在这个程序里，有个比较重要的类，就是解析和根据key获取到对应的值。你可以看到，在代码里都是通过<br/>LangManager.getContent(&#34;enBtn&#34;);去获取到对应得值<br/>呵呵，关键就是LangManager这个类，里面做了个递归，去获取xml文件中的key和vlaue信息，大家可以下载源文件去仔细看看<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0806/h2008626214923.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=30</link>
			<title><![CDATA[[AS3&amp;JS]Flash中生成Js方法，刷新页面]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Tue,10 Jun 2008 14:27:50 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=30</guid>	
		<description><![CDATA[这也是js方法&#34;eval&#34;中的一种应用。利用flash生成js的方法，并让flash进行后续调用<br/>同时，也可以通过eval，直接刷新整个html页面。<br/>代码很简单，我就不直接说了，贴出来，大家可以直接看效果<br/><br/>例子运行<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0"/>Flash动画</div><div class="UBBContent"><a id="temp71201_href" href="http://www.sujun.org/javascript:MediaShow('swf','temp71201','attachments/month_0806/72008610142925.swf','400','300')"><img name="temp71201_img" src="http://www.sujun.org/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""/><span id="temp71201_text">在线播放</span></a><div id="temp71201"></div></div></div><br/><br/>代码部分<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;utf-8&#34;?&gt;<br/>&lt;mx:Application&nbsp;xmlns:mx=&#34;<a href="http://www.adobe.com/2006/mxml" target="_blank">http://www.adobe.com/2006/mxml</a>&#34;&nbsp;layout=&#34;vertical&#34;&nbsp;fontFamily=&#34;Times&nbsp;New&nbsp;Roman&#34;&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fontSize=&#34;12&#34;&nbsp;creationComplete=&#34;init()&#34;&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;![CDATA[<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;import&nbsp;mx.controls.Alert;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;import&nbsp;flash.external.ExternalInterface;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;init():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//需要在js生成的代码<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;str:String&nbsp;=&nbsp;&#34;function&nbsp;testMethod(str)&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;{&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;alert(&#39;Flash传来:&#39;&nbsp;+&nbsp;str);&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;return&nbsp;&#39;js返回：&#39;&nbsp;+&nbsp;str;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str&nbsp;=&nbsp;str&nbsp;+&nbsp;&#34;}&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//利用eval函数生成<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExternalInterface.call(&#34;eval&#34;,&nbsp;str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;buttonClick():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//调用刚刚生成的方法<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;str:String&nbsp;=&nbsp;ExternalInterface.call(&#34;testMethod&#34;,&nbsp;valueText.text);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Alert.show(str);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;function&nbsp;fulshHtmlEvent():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//刷新页面<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExternalInterface.call(&#34;eval&#34;,&nbsp;&#34;location.reload();&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;]]&gt;<br/>&#160;&#160;&#160;&#160;&lt;/mx:Script&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;label=&#34;提交&#34;&nbsp;id=&#34;subimtBtn&#34;&nbsp;click=&#34;buttonClick()&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:TextInput&nbsp;width=&#34;122&#34;&nbsp;id=&#34;valueText&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Label&nbsp;text=&#34;Flash数据：&#34;/&gt;<br/>&#160;&#160;&#160;&#160;&lt;mx:Button&nbsp;label=&#34;刷新页面&#34;&nbsp;id=&#34;flushBtn&#34;&nbsp;click=&#34;fulshHtmlEvent()&#34;/&gt;<br/>&lt;/mx:Application&gt;<br/><br/></div></div><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=29</link>
			<title><![CDATA[[as3,js]在Flash中动态生成js代码并执行]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sat,07 Jun 2008 23:20:21 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=29</guid>	
		<description><![CDATA[最近在做关于flash解析一些类似网页浏览相关的技术，其中会涉及一些js的技术<br/>js很少用，不是很熟，没怎么用，所以边做边查<br/>由于需要在flash执行部分js代码，而且必须动态生成的．研究一下，发现js有个类似as以前的函数<br/>＂eval＂，呵呵，在这里做文章就可以了<br/>eval能把字符串转化为对应的对象或是数值，而且还可以执行表达式．<br/>例子代码很简单，在此仅做个记录<br/><br/>ExternalInterface.call(&#34;eval&#34;,&nbsp;&#34;alert(&#39;生成成功,soda&#39;);&#34;);<br/><br/>只需要在文档类里执行这一句就可以了，接着可以看到网页里弹出js窗口<br/><img src="http://www.sujun.org/attachments/month_0806/l20086723207.jpg" border="0" alt=""/><br/><br/>呵呵，这样发展的空间就大了，<br/>在js和flash之间自由切换，同时flash可以更好地操作html（通过js）<br/>有兴趣的人可以去深入研究<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=27</link>
			<title><![CDATA[[AS3]使用RSL进行AS瘦身编程]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Sun,04 May 2008 00:09:44 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=27</guid>	
		<description><![CDATA[RSL是什么？？RSL是&nbsp;Runtime&nbsp;Shared&nbsp;Library的简称。我个人的理解时是在swf编译的时候，不把在该swf中使用的一些类库编译进swf中去，而是在该swf运行的时候动态加载，该swf是要使用的类库，从而达到减小swf体积的目的。<br/>做as编程的人都知道，如果每个swf都引用了同一个类的话，那么你编译每个swf的时候，都会把那个类编译进去，也是就是说，无形中对整个应用而言，就多了几份类库而增大了内容<br/>例如你有&nbsp;a.swf,b.swf,c.swf，同时引用了sodaTest.as这个类，传统的做法是每个swf都把sodaTest编译进去。而使用RSL技术的话，则把sodaTest.as这个类编译进一个特殊的swf进去（lib.swf，该swf包含sodaTest），在a，b，c运行的时候，把lib.swf这个swf加载进去就可以了。三个swf共享一个，从而减小了体积<br/>下面，看具体的设置步骤吧(下面提供的方法只是多种方法的其中之一：)，使用工具是FlexBuilder，以asiwng代码库为例子<br/><br/>首先我们需要制作一个被多个swf需要加载swf代码库<br/>1.把需要的代码打包进一个swf里去，该步骤前需要一个你需要打包进代码库的swc<br/>（可以在FB中建立一个Flex&nbsp;Library&nbsp;Project，利用把你需要的代码生成swc）<br/>新建个Flex&nbsp;Library&nbsp;Project为Aswing<br/><img src="http://www.sujun.org/attachments/month_0805/u200853234935.jpg" border="0" alt=""/><br/><br/>2.新建一个AswingDll的ActionScript&nbsp;Project项目<br/>新建个AswingDll<br/><img src="http://www.sujun.org/attachments/month_0805/7200853235014.jpg" border="0" alt=""/><br/><br/>3.接着在AswingDll项目属性中，增加命令，在ActionScprit&nbsp;Compiler&nbsp;增加下面的命令<br/>-include-libraries&nbsp;<br/>E:\workspace\FlexProject\Aswing\bin<br/>其中E:\workspace\FlexProject\Aswing\bin是你需要做加载的代码库的swc的目录位置<br/>(我这里是用我自己设置的目录去生成，而不是在flex中刚建立的)<br/><img src="http://www.sujun.org/attachments/month_0805/n200853235233.jpg" border="0" alt=""/><br/>4.接着编译就行了.....看生成AswingDll，用破解软件看看，是不是多了你需要的代码了:),大小有400多K，包括了awing的代码了<br/><br/>5.接着新建一个AswingTest的ActionScript&nbsp;Project项目，用来使用这个AswingDll<br/>在AswingTest这个项目属性还需要做一些设置的，在Library&nbsp;Path中，添加aswing代码库或者aswing的swc<br/><img src="http://www.sujun.org/attachments/month_0805/62008540524.jpg" border="0" alt=""/><br/>看图片中蓝色的部分，双击它，弹出下面的界面，选择Exteral这个选项，再确定就可以了<br/><img src="http://www.sujun.org/attachments/month_0805/i2008540747.jpg" border="0" alt=""/><br/>做完这些步骤后，就可以去编译自己的程序啦<br/><br/>具体的我就先不写了，可以参考www.flashdll.org，里面有详细的例子<br/>(明天我再出一个使用例子)<br/>有什么问题，就到www.actionscript3.cn提问吧<br/>呵呵<br/><br/>之前的代码修改了一下<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>package&nbsp;<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.display.Sprite;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.display.Loader;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.events.Event;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.system.LoaderContext;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.net.URLRequest;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.system.ApplicationDomain;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;flash.utils.getDefinitionByName;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.aswing.AsWingManager;<br/>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;o&#114;g.aswing.JFrame;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;[SWF&nbsp;(width=800,&nbsp;height=600)]<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Main&nbsp;extends&nbsp;Sprite&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;loader:Loader;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;Main()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader&nbsp;=&nbsp;new&nbsp;Loader();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.contentLoaderInfo.addEventListener(Event.COMPLETE,&nbsp;onLoader);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.load(new&nbsp;URLRequest(&#34;dll/AsWingDLL_1_3_0.swf&#34;),&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;LoaderContext(false,&nbsp;ApplicationDomain.currentDomain));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;onLoader(event:Event):void<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AsWingManager.initAsStandard(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;frame:JFrame&nbsp;=&nbsp;new&nbsp;JFrame(this,&#34;测试反射&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setSizeWH(400,300);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.show();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div><br/>效果图<br/><img src="http://www.sujun.org/attachments/month_0804/22008424233123.jpg" border="0" alt=""/><br/><br/>很明显，可以看到体积非常小，<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.sujun.org/default.asp?id=24</link>
			<title><![CDATA[[AS3]在反射中使用静态方法]]></title>
			<author>sujun10@21cn.com(弃天笑)</author>
			<category><![CDATA[ActionScript]]></category>
			<pubDate>Thu,24 Apr 2008 22:55:50 +0800</pubDate>
			<guid>http://www.sujun.org/default.asp?id=24</guid>	
		<description><![CDATA[个人比较喜欢用xml配置一些flash中使用的信息，尤其是利用反射（java感染的习惯的），主要是因为比较多是做架构，讲究的通用性<br/>在AS3中，类的实例是不能使用该类中的静态方法的。只能通过类名来调用静态方法。所以利用反射使用一个类的静态方法时候，就可以少一步啦，直接反射出来的class，再调用静态方法就可以了。<br/>在程序中直接输出类名，得出的是class对象。下面还是看看代码吧<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>import&nbsp;flash.display.Sprite;<br/>import&nbsp;o&#114;g.sujun.StaticClass;<br/><br/>public&nbsp;class&nbsp;Main&nbsp;extends&nbsp;Sprite&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;private&nbsp;var&nbsp;str:StaticClass;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;Main()&nbsp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&nbsp;st:Class&nbsp;=&nbsp;getDefinitionByName(&#34;org.sujun.StaticClass&#34;)&nbsp;as&nbsp;Class;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;==&#34;&nbsp;+&nbsp;st);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(st.name);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;st[&#34;staticTest&#34;]();<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>}<br/></div></div><br/><br/>下面是静态属性的方法和类<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.sujun.org/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/**<br/>&nbsp;*&nbsp;@(#)StaticClass.as<br/>&nbsp;*&nbsp;<br/>&nbsp;*&nbsp;@author&nbsp;soda.C&nbsp;&nbsp;E-mail:sujun10@21cn.com<br/>&nbsp;*&nbsp;@version&nbsp;1.0<br/>&nbsp;*&nbsp;&lt;br&gt;Copyright&nbsp;(C),&nbsp;2007&nbsp;soda.C<br/>&nbsp;*&nbsp;&lt;br&gt;This&nbsp;program&nbsp;is&nbsp;protected&nbsp;by&nbsp;copyright&nbsp;laws.<br/>&nbsp;*&nbsp;&lt;br&gt;Program&nbsp;Name:Soda.API<br/>&nbsp;*&nbsp;&lt;br&gt;Date:2008-4-24<br/>&nbsp;*/<br/>package&nbsp;o&#114;g.sujun<br/>{<br/>&#160;&#160;&#160;&#160;public&nbsp;class&nbsp;StaticClass&nbsp;<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;static&nbsp;var&nbsp;name:String&nbsp;=&nbsp;&#34;soda&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;static&nbsp;function&nbsp;staticTest():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;staticTest&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;public&nbsp;function&nbsp;test():void<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(&#34;test&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>}<br/><br/></div></div><br/>你复制那里代码就可以，很简单，呵呵<br/><img src="http://www.sujun.org/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.sujun.org/attachments/month_0804/12008424225515.rar" target="_blank">代码下载</a><br/>]]></description>
		</item>
		
</channel>
</rss>