Flex中XMLSocket与Java中Socket通信,遇到的问题是,Java中的socket能够接受到XMLSocket传输的数据,但是Flex并不能接受到从Java服务器传输的数据,从网上搜了好多资料,终于找到了原因,原来XMLSocket 接收到服务端下发的数据时,将连续放于接收缓冲区,直到接收到 "\0" 字节(字节内容为 ASCII 值 0),才认为接收完成,并调用相应的 onData 或 onXML 事件,因此,服务端若用 Java 编写,并使用标准的 String 类族,则在发送数据结尾应手动加上 "\0",同样,当XMLSocket发送数据时,也会在数据的结尾自动加上"\0"。
我现在将我做的一个简单的XMLSocket通信的例子贴出来跟大家共享一下,如果有什么不足的地方,还望大家批评指出,毕竟我也是flex初学者,呵呵!
Java应用程序代码:
view plaincopy to clipboardprint?
public class XMLServerSocket {
private ServerSocket serverSocket;
private Socket socketin;
private BufferedReader br;
private PrintStream ps;
public static void main(String[] args) {
new XMLServerSocket();
}
private XMLServerSocket() {
try {
serverSocket = new ServerSocket(8800);
socketin = serverSocket.accept();
br = new BufferedReader(new InputStreamReader(socketin
.getInputStream()));
ps = new PrintStream(socketin.getOutputStream());
ps.println("Input EXIT for end\0");
ps.flush();
out("Input EXIT for end");
boolean done = false;
while (!done) {
String str = br.readLine();
if (str == null || (str.length() == 1 && str.charAt(0) == '\0')) {
done = true;
} else {
char first = str.charAt(0);
char tail = str.charAt(str.length() - 1);
if (first == '\0') {
str = str.substring(1);
}
if (tail == '\0') {
str = str.substring(0, str.length() - 2);
}
out(str);
ps.println(str + "\0");
if (str.trim().equals("EXIT")) {
done = true;
br.close();
}
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private void out(String str) {
System.out.println(str);
}
}
Flex程序代码:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<!--[CDATA[
private var xmlconnect:XMLSocket;
private function connectServer():void
{
try{
xmlconnect = new XMLSocket();
xmlconnect.connect("localhost",8800);
xmlconnect.addEventListener(DataEvent.DATA,onData);
}
catch(e:Error)
{
trace(e.message);
}
}
private function onData(event:DataEvent):void
{
content.text = event.text;
}
private function sendData():void
{
xmlconnect.send(datasend.text + "\n");//必须加上"\n",否则数据不能成功发送
}
]]-->
</mx:Script>
<mx:Text id="content" width="271" height="116" horizontalCenter="0" verticalCenter="0" />
<mx:TextInput id="datasend" horizontalCenter="0" verticalCenter="95"/>
<mx:Button label="发送" horizontalCenter="0" verticalCenter="121" click="sendData()"/>
<mx:Button label="连接" horizontalCenter="0" verticalCenter="-103" click="connectServer()"/>
</mx:Application>
http://blog.csdn.net/zxhbjz5/archive/2009/11/17/4821878.aspx
转的原因,因为自己也遇见过这样的问题。
分享到:
相关推荐
flash XMLSocket java 通信(采用服务器推技术 解决了乱码 )本东西属于原创
flash actionscript3游戏开发之as3的socket通信方式介绍即使用XMLSocket.zip
FLASH通过XMLSocket与VB后台通信代码
XMLSOCKET OR JAVA alternation
安全沙漏令很多初搞flex socket的朋友头痛,我也一样!!!! 此例解决了这个问题。服务端 用的java。客户端用的是xmlSocket。(客户端用socket也是雷同)
flash中XMLSocket类的文档说明
flex Socket XMLSocket+vs
在Adobe Flash Player升级到9.0.124后,由于安全策略更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的手段不能继续使用。更改如下: 1,首先检测目标服务器的843端口是否提供安全策略 2,如果1没有检测...
URLLoader(URLStream) FlashRemoting XMLSocket(Socket) FMS/FCS
javascript xmlsocket 即时通讯客户端源码
解决xmlsocket 需要的843端口
这是合肥工业大学动漫工具基础这门课的作业,使用flash前端+java后台的方式,用XMLSocket与Java后台通信,有一些缺陷欢迎改进
FLASH AS3 SOCKET收发16进制示例
flash xmlsocket实例源码
5种方案 当服务器发生数据发生变化时 主动通知前台网页更新页面.zip ajax Comet Flash XMLSocket H5 websocket java applet socket
flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况...
XMLSocket通信 第十九章. XML(607) 19.1节. 加载一个XML文件 19.2节. 通过E4X语法遍历XML文档 19.3节. 使用正则表达式在E4X中进行查询 19.4节. 添加一个XMLList到XML对象 19.5节. 对一个XMLList或E4X查询进行绑定 ...
xmlsocket 实现服务端主动向客户端推送消息
在Arduino与Flash之间实现交互最重要的一点是如何为两者建立起有效的通信途径。出于安全性上的考虑,Flash本身不能直接操作硬件,但它能够通过XMLSocket,并按照一定的约定同与外界实现通信:
学习flash的XMLsocket的连接处理的实例!