使用Flash的XMLSocket与Servlet建立长连接(1,建立socket控件)
来源:互联网 发布:美的网络专供 编辑:程序博客网 时间:2024/04/27 19:47
使用Flash的XMLSocket与Servlet建立长连接(1,建立socket控件)
适用范围:当服务端需要向客户机主动发送消息的时候
有些情况,客户端发送一个请求,服务段需要一个很长时间的处理,这个时候,客户端
很可能是个白页,且无法响应。而服务端无法向客户机主动发送消息。
该方法适用于以上这种情况,并以一个进度条为例
1. 建立net.swf
打开Flash新建一个fla文件
在第一桢创建一个文本组件,名称为lotTxt,用于输出日志
打开第一桢的脚本编辑器,切换到专家模式,写入如下脚本:
/*
* $RCSfile: com.inet.net.fla,v $
* $Revision: 1.1 $
*
* Copyright (C) 2005 inet, Inc. All rights reserved.
*
* This software is the proprietary information of inet, Inc.
* Use is subject to license terms.
*
* @author: chenyankui
* @Date: 2006-9-28
*/
import flash.external.ExternalInterface;
import com.inet.util.UUID;
import com.inet.util.DateFormat;
// 创建新的 StyleSheet 对象。
var logStyles:TextField.StyleSheet = new TextField.StyleSheet();
logStyles.setStyle("html", {fontFamily: "Arial, Helvetica,sans-serif", fontSize: "18px", color:"#FF0000"});
logStyles.setStyle("body", {color: "#00CCFF", textDecoration:"underline"});
// 将 TextAreaInstance.styleSheet 属性设置为新定义的、名为 styles 的 styleSheet 对象。
logTxt.styleSheet = logStyles;
logTxt.html = true;
var logger:Object = new Object();
var format = "";
var debugEnabled:Boolean = false;
var infoEnabled:Boolean = true;
var logEnabled:Boolean = true;
var warnEnabled:Boolean = true;
var errorEnabled:Boolean = true;
var LogLevel = new Object();
LogLevel["DEBUG"] = 1;
LogLevel["INFO"] = 2;
LogLevel["LOG"] = 3;
LogLevel["WARN"] = 4;
LogLevel["ERROR"] = 5;
logger.debug = function(log:String):Void
{
if(debugEnabled)
{
logTxt.text += "[DEBUG:" + DateFormat.getTime() + "]: " + log + "/n";
}
}
logger.info = function(log:String):Void
{
if(infoEnabled)
{
logTxt.text += "[INFO :" + DateFormat.getTime() + "]: " + log + "/n";
}
}
logger.log = function(log:String):Void
{
if(logEnabled)
{
logTxt.text += "[LOG :" + DateFormat.getTime() + "]: " + log + "/n";
}
}
logger.warn = function(log:String):Void
{
if(warnEnabled)
{
logTxt.text += "[WARN :" + DateFormat.getTime() + "]: " + log + "/n";
}
}
logger.error = function(log:String):Void
{
if(errorEnabled)
{
logTxt.text += "[ERROR:" + DateFormat.getTime() + "]: " + log + "/n";
}
}
logger.put = function(log:String):Void
{
logTxt.text += "[INFO :" + DateFormat.getTime() + "]: " + log + "/n";
}
function clrLog():Void
{
logTxt.text = "<font color='#FF0000'>Macromedia Flash 8 version:" + System.capabilities.version + "</font><br/>";
}
function setLogLevel(level:String):Number
{
var k = LogLevel[level];
if(k == null)
{
return -1;
}
logger.put("当前日志级别: " + level);
debugEnabled = (LogLevel["DEBUG"] >= k);
infoEnabled = (LogLevel["INFO"] >= k);
logEnabled = (LogLevel["LOG"] >= k);
warnEnabled = (LogLevel["WARN"] >= k);
errorEnabled = (LogLevel["ERROR"] >= k);
logger.put("debugEnabled :" + debugEnabled);
logger.put("infoEnabled :" + infoEnabled);
logger.put("logEnabled :" + logEnabled);
logger.put("warnEnabled :" + warnEnabled);
logger.put("errorEnabled :" + errorEnabled);
}
clrLog();
//logger.put("<font color='#FF0000'>Macromedia Flash 8 version:" + System.capabilities.version + "</font>");
/*
var df1:DateFormat = new DateFormat("yyyy-MM-dd HH:mm:ss SSS");
var df2:DateFormat = new DateFormat("MM/dd/yy");
var df3:DateFormat = new DateFormat("dd/MM/yy");
var df4:DateFormat = new DateFormat("yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒");
var dt:Date = df1.parse("2004-02-23 13:24:48 789");
logger.info(dt.toString());
logger.info(df1.format(dt));
logger.info(df2.format(dt));
logger.info(df3.format(dt));
logger.info(df4.format(dt));
logger.info("当前时间:" + df1.format(new Date()));
var a:Number = new Date().getTime();
if(uuid.charAt(0) == "-")
{
logger.info("++++++");
}
logger.info("" + a.toString(10));
logger.info("" + a.toString(16));
logger.info("" + (256).toString(16));
logger.info("uuid:" + UUID.getUUID());
logger.info("uuid:" + UUID.getUUID());
logger.info("uuid:" + UUID.getUUID());
logger.info("Number.MIN_VALUE = " + Number.MIN_VALUE);
logger.info("Number.MAX_VALUE = " + Number.MAX_VALUE);
*/
clrBtn.addEventListener("click", clrLog);
var onxml:String = "$SocketOnXml";
var ondata:String = "$SocketOnData";
var onclose:String = "$SocketOnClose";
var onconnect:String = "$SocketOnConnect";
var SOCKET_UUID_PREFIX:String = "NET";
var SOCKET_UUID_SUFFIX:String = "Socket";
var SocketMap:Object = new Object();
function createSocket()
{
var sid = SOCKET_UUID_PREFIX + UUID.getUUID() + SOCKET_UUID_SUFFIX;
SocketMap[sid] = new XMLSocket();
logger.debug("CreateSocket: " + sid);
return sid;
}
function closeSocket(sid:String):Void
{
var skt = SocketMap[sid];
if(skt != null && (skt instanceof XMLSocket))
{
logger.debug("CloseSocket: " + sid);
skt.close();
}
}
function sendString(sid:String, src:String):Void
{
var skt = SocketMap[sid];
if(skt != null && (skt instanceof XMLSocket))
{
logger.debug("Send: " + src);
skt.send(src);
}
}
function connect(sid:String, host:String, port:Number):Boolean
{
var skt = SocketMap[sid];
var flag:Boolean = false;
if(skt != null && (skt instanceof XMLSocket))
{
try
{
flag = skt.connect(host, port);
logger.info("->连接到: " + host + ":" + port + "flag:" + flag);
}
catch(e)
{
legger.info(e.name + ":" + e.message);
}
}
return false;
}
function addOnXmlEvent(sid:String)
{
if(sid != null && sid != "")
{
var skt = SocketMap[sid];
if(skt != null && (skt instanceof XMLSocket))
{
skt.onXML = function(src:String):Void
{
logger.debug("接收数据XML: " + src);
ExternalInterface.call(onxml, sid, escape(src));
}
}
}
}
function addOnDataEvent(sid:String)
{
if(sid != null && sid != "")
{
var skt = SocketMap[sid];
if(skt != null && (skt instanceof XMLSocket))
{
skt.onData = function(src:String):Void
{
logger.debug("接收数据TXT: " + src);
ExternalInterface.call(ondata, sid, escape(src));
}
}
}
}
function addOnCloseEvent(sid:String)
{
if(sid != null && sid != "")
{
var skt = SocketMap[sid];
if(skt != null && (skt instanceof XMLSocket))
{
skt.onClose = function():Void
{
logger.debug("Close Socket ......call: " + onclose);
ExternalInterface.call(onclose, sid);
}
}
}
}
function addOnConnectEvent(sid:String)
{
if(sid != null && sid != "")
{
var skt = SocketMap[sid];
if(skt != null && (skt instanceof XMLSocket))
{
skt.onConnect = function(success:Boolean):Void
{
logger.debug("Connect success:" + success + " ......call: " + onconnect);
ExternalInterface.call(onconnect, sid, success);
}
}
else
{
logger.debug(sid + "is NULL");
}
}
else
{
logger.debug("addOnConnectEvent NullPointerException [sid:" + sid + "]");
}
}
function addSocketEvent(sid:String):Void
{
if(sid != null && sid != "")
{
logger.debug("addSocketEvent ......");
addOnXmlEvent(sid);
addOnDataEvent(sid);
addOnCloseEvent(sid);
addOnConnectEvent(sid);
}
}
function $loadPolicyFile(uri:String):Void
{
if(uri != null)
{
logger.info("加载策略文件:" + uri);
System.security.loadPolicyFile(uri);
}
}
function getSystemProperty(key:String):String
{
return System.capabilities[key];
}
ExternalInterface.addCallback("setLogLevel", null, setLogLevel);
ExternalInterface.addCallback("connect", null, connect);
ExternalInterface.addCallback("closeSocket", null, closeSocket);
ExternalInterface.addCallback("createSocket", null, createSocket);
ExternalInterface.addCallback("sendString", null, sendString);
ExternalInterface.addCallback("addSocketEvent", null, addSocketEvent);
ExternalInterface.addCallback("loadPolicyFile", null, $loadPolicyFile);
ExternalInterface.addCallback("getSystemProperty", null, getSystemProperty);
编译该flash, 按下shift + F12即可。生成net.swf文件。
好了,到此为止创建socket控件的工作已经完成了,接下来就可以使用该控件与ServerSocket通信了。
- 使用Flash的XMLSocket与Servlet建立长连接(1,建立socket控件)
- 使用Flash的XMLSocket与Servlet建立长连接(4,建立测试的Servlet类)
- 使用Flash的XMLSocket与Servlet建立长连接(5,建立JavaScript的进度条类)
- 使用Flash的XMLSocket与Servlet建立长连接(6,建立测试的jsp)
- 使用Flash的XMLSocket与Servlet建立长连接(2,建立JavaScript类)
- 使用Flash的XMLSocket与Servlet建立长连接(3,建立XMLSocketWriter类)
- 使用Flash的XMLSocket与Servlet建立长连接(7,测试的页面截图)
- 使用Flash的XMLSocket与Servlet建立长连接(8,net.fla的辅助类)
- 使用socket建立长连接
- 怎么建立socket长连接???
- 怎么建立socket长连接???
- 怎么建立socket长连接???
- Flash AS3.0 Socket资源(1)——与Socket服务器建立连接
- socket 连接的建立
- IM长连接建立XMPP协议的使用
- 安卓中使用WebSocket建立简单实用的长连接
- iOS中使用GCDAsyncSocket建立长连接
- Android使用Mina建立长连接
- 心情不爽
- 我在服务程序里用CreateProcessWithLogon
- 今年过年 我很冷
- 用其他身份执行程序
- 关于“C++中产生随机数”(引用 http://hi.baidu.com/vincey/blog/item/5c145d08dd1e6d950a7b824b.html)
- 使用Flash的XMLSocket与Servlet建立长连接(1,建立socket控件)
- 如何处理Java里的DOM异常
- Eclipse plugin.xml中的%(百分号)
- 哇,体重超了9公斤!
- 使用Flash的XMLSocket与Servlet建立长连接(2,建立JavaScript类)
- Control Spy 2.0
- 使用Flash的XMLSocket与Servlet建立长连接(3,建立XMLSocketWriter类)
- VC++ WIN32 sdk实现按钮自绘详解.
- 生活就像强奸