FLASH与服务器通讯 (JAVA)
1.FLASH 通过URL地址获得服务器数据。
这种方式最为简单,就像在浏览器的地址栏里面敲一样。
先建立一个URLRequest,然后用URLLoader载入就行了。
下面这个是载入一个图片,html页面也用同样方法载入。
//worldterminator原创,转载请注明此处
?
这种方法的缺点显而易见,大量的参数必须写到地址里,数据被暴露而且格式转换麻烦。
//worldterminator原创,转载请注明此处
2.通过AMF协议来通讯。AMF协议是ADOBE自己开发的一种建立在HTTP基础上的协议。可以装一个flash mx remoting来实现或者装openAMF来实现,这里只讨论openAMF。先下载一个openAMF,最好带example版本的。然后把openamf.ear放到tomcat的webapps下,启动tomcat,输入
http://localhost:8080/openamf/gateway如果看到空白页,说明openAMF好用了。如何用呢?
amf的通信方式是在服务器端把java的class放到web-inf的class中,然后在flash端直接调用这个class的方法就行了。
比如helloworld这个例子。?
注意!如果把这个串存到字符串里发回去,不要忘记那个\0,XML都是以\0结尾的。
然后FLASH会主动断开,再执行连接,然后才算连上。
//worldterminator原创,转载请注明此处
先看FLASH端代码如何写:?
?//worldterminator原创,转载请注明此处
sender:
?
package for_flash_socket;import java.util.*;import java.io.*;public class Sender { ArrayList outputArrayList; public Sender() { outputArrayList = new ArrayList(); } public void addOutput(OutputStream out) { outputArrayList.add(out); } public void removeOutput(OutputStream out) { outputArrayList.remove(out); } public void send(String s) { for (int i=0;i<outputArrayList.size();i++) { PrintWriter pw = new PrintWriter((OutputStream)outputArrayList.get(i)); pw.write(s); pw.flush(); } }}?
线程那个部分代码写得比较搓,明白原理就行了……
//worldterminator原创,转载请注明此处
这样基本的通信功能就实现了,在接收的时候先判断一下发过来的是不是安全认证s.indexOf("<policy-file-request/>")>=0
如果是返回安全认证,就是那个safe字符串。
否则把发过来的信息广播出去。sender.send方法。
//worldterminator原创,转载请注明此处
要注意的是:
?while ( is.read(reader) != -1 )这一行
我一开始用的是BufferedReader readLine()方法读取的。总是莫名奇妙的出错,所以建议不要用BufferedReader,直接读取byte或者byte数组的方式比较好。再把byte[]转成string判断是否是FLASH发过来的安全认证。
如果出现安全沙箱错误,一般是安全认证没有返回,但是别的情况也有可能出现这个错误,比如服务器的socket关闭早了,或者服务器没有把socket流内的内容读取完毕就关闭了,都会导致这个错误。
所以socket读到不能再读,然后再关闭,这个地方需要注意。
还有一个用XMLSocket的方式通信的,和socket差不多,这里不多说了,安全认证也是一样的,比socket简单一些。
这样,就完成了基本的 FLASH与JAVA 通信。//worldterminator原创,转载请注明此处
1 楼 恋曲2000 2010-09-26 学习了 谢谢lz