ActionScript 3.0中用XMLSocket与服务器通讯程序(源码)

代码如下:

//
// CXMLSocket.as
//
//
// Written by Leezhm, 20th Oct, 2008
// Contact : Leezhm@luxoom.cn
//
package
{
import flash.events.DataEvent;
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.XMLSocket;
import flash.system.Security;
public class CXMLSocket extends XMLSocket
{
// declare variables
private var mHostName:String = "127.0.0.1";
private var mPort:int = 7654;
private var mStrRecvBuf:String;
// constructor
public function CXMLSocket():void
{
//ConfigNetEvent(this);
Connect();
}
public function Connect():void
{
var xmlStr:String = "xmlsocket://";
xmlStr += mHostName;
xmlStr += ":";
xmlStr += mPort;
Security.loadPolicyFile(xmlStr);
trace(xmlStr);
ConfigNetEvent(this);
this.connect(mHostName, mPort);
}
private function ConfigNetEvent(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.CONNECT, OnConnect);
dispatcher.addEventListener(Event.CLOSE, OnClose);
dispatcher.addEventListener(DataEvent.DATA, OnSocketData);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, OnIOError);
dispatcher.addEventListener(ProgressEvent.PROGRESS, OnProgress);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, OnSecurityError);
}
private function OnConnect(ArgEvent:Event):void
{
trace("OnConnect--->" + ArgEvent);
this.send("Connected");
}
private function OnClose(ArgEvent:Event):void
{
trace("OnClose--->" + ArgEvent);
}
private function OnSocketData(ArgEvent:DataEvent):void
{
trace(ArgEvent.text);
}
private function OnIOError(ArgEvent:IOErrorEvent):void
{
trace("OnIOError--->" + ArgEvent.text);
}
private function OnProgress(ArgEvent:ProgressEvent):void
{
trace("OnProgress--->" + ArgEvent.bytesLoaded +
" Total:" + ArgEvent.bytesTotal);
}
private function OnSecurityError(ArgEvent:SecurityErrorEvent):void
{
trace("OnSecurityError--->" + ArgEvent);
}
}
}

基于C++的服务器源码:


代码如下:

// Server.cpp : implementation file
//
#include "stdafx.h"
#include "Server.h"
#include "SerialPort.h"
extern CSerialPort m_Ports;
// CServer
extern CPtrArray gSocketArr;
extern bool gbIsConnected;
CServer::CServer():mStrSendBuf("")
{
//bIsConnectFlash = false;
}
CServer::~CServer()
{
}
// CServer member functions
void CServer::OnAccept(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(0 == nErrorCode)
{
CServer * pSocket = new CServer();
if(SOCKET_ERROR != this->Accept(*pSocket))
{
gSocketArr.Add(pSocket);
}
else
{
::AfxMessageBox(_T("Accept->Error"));
}
pSocket = NULL;
}
CAsyncSocket::OnAccept(nErrorCode);
}
void CServer::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(0 == nErrorCode)
{
char buf[30] = {0};
int nRead = this->Receive(buf, 30);
if(0 != nRead && SOCKET_ERROR != nRead)
{
//
// debug info
//
std::fstream debug;
debug.open(_T("Debug.txt"), std::ios::app);
int yvalue;
if(debug.is_open())
{
debug<<buf<<"\n";
yvalue = atoi(buf);
//m_Ports.WriteToPort(
}
debug.close();
if(0 == strcmp("<policy-file-request/>", buf))
{
std::string strXML = "<cross-domain-policy>";
strXML += "<allow-access-from domain=\"*\"to-ports=\"*\"/>";
//strXML += "<allow-access-from domain=\"localhost\"to-ports=\"1025,9999\"/>";
strXML += "</cross-domain-policy>";
strXML += "\0\0";
this->Send(strXML.c_str(), (int)strXML.length() + 1);
gbIsConnected = true;
}
else if(0 == strcmp("Connected", buf))
{
////::AfxMessageBox(_T("Hello"));
gbIsConnected = true;
}
}
}
CAsyncSocket::OnReceive(nErrorCode);
}
void CServer::SendData()
{
if(0 == gSocketArr.IsEmpty())
{
for(int i = 0; i < gSocketArr.GetSize(); i++)
{
((CServer *)gSocketArr[i])->Send(mStrSendBuf.c_str(), (int)mStrSendBuf.length() + 1);
}
std::fstream debug;
debug.open(_T("Debug.txt"), std::ios::app);
int yvalue;
if(debug.is_open())
{
debug<<mStrSendBuf<<"\n";
}
debug.close();
}
else
{
::AfxMessageBox(_T("Socket Error"));
}
}

注意服务器端程序是继承了MFC中CAsyncSocket的一个异步socket类

(0)

相关推荐

  • ActionScript3禁止构造请求标头Referer

    作为未来RIA的主角FLASH,在安全方面做得越来越出色了. 在AS3中我惊奇地发现啊adobe居然把Referer伪造给禁止了!!! ArgumentError: Error #2096: HTTP 请求标头 Referer 不能通过 ActionScript 设置.   at flash.display::Loader/flash.display:Loader::_load()   at flash.display::Loader/load()   at Timeline0_e150d995

  • Javascript 调用 ActionScript 的简单方法

    1. 在Flex中,ActionScript调用Javascript是比较简单的,说白了就是,在html里,怎么调用Javascript,在ActionScript就怎么调用就可以了 2. 如果用js调用as,就稍微麻烦一点,其实也比较简单 MXML代码: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com//mxml&

  • Flash中常用到的ActionScript控制语句用法

    很多朋友经常询问关于Flash的ActionScript脚本语句的用法,有些很简单的命令就能实现某种功能,我就从这里,那里,东拼西凑的找了一写,.现在我就把一些Flash的常用Action语句的基本用法讲解一下. 1.Goto:跳到一个指定的帧(Frame) Scene: 指定 Scene Frame:Number,Label,Expression,Next Frame,Previous Frame 可以选择 Frame 的编号,标号,通过表达式,下一帧,前一帧 Expression: 定义表达

  • JavaScript和ActionScript的交互实现代码

    复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import flash.external.ExternalInterface; publ

  • Flash ActionScript 中按钮和电影剪辑的事件和方法

    事 件 方 法 说 明 on(press) onPress 鼠标左键按下 on(release) onRelease 鼠标单击(左键按下并释放) on(releaseOutside) onReleaseOutside 鼠标左键按下之后在按钮之外释放 on(rollOver) onRollOver 鼠标悬停在按钮之上 on(rollOut) onRollOut 鼠标移动到按钮响应区域之外 on(dragOver) onDragOver 鼠标在按钮上施动 on(dragOut) onDragOut

  • actionscript与javascript的区别

    当时Netscape的JavaScript使其在与ie的浏览器大战中独占鳌头,而后ie创建了jscript应对Netscape的JavaScript,而事实上jscript基本上抄袭的JavaScript,这也是微软一直备受诟病的一件事,jscript与JavaScript有一些语法上的不一样,但二者均是同一类web开发技术,而且目前流行的是JavaScript,jscript的使用已经越来越少了.另外JavaScript的核心为ecmascript,与actionscript的核心一样,所以学

  • ActionScript中文电子书(chm)文件下载

    ActionScript中文电子书. 学flash可得研究一下哦. 动作脚本字典概述 本字典描述 Macromedia Flash MX 2004 和 Macromedia Flash MX Professional 2004 中的动作脚本元素的语法和用法.若要使用脚本中的示例,请复制本字典中的示例代码,然后将其粘贴到"脚本"窗格或外部脚本文件中.本字典列出了所有动作脚本元素,包括运算符.关键字.语句.动作.属性.函数.类和方法.有关所有字典条目的概述,请参见字典内容:若要查找其类未知

  • JavaScript与ActionScript3两者的同性与差异性

    javascript和actionscript是基于什么标准的,大家知道吗? ActionScript 和 JavaScript 共享一个常用标准:ECMAScript.因此,如果您曾经用 JavaScript 编写过一个条件("if 语句")或迭代("循环语句"),则您可以使用 ActionScript.记住 JavaScript 和 ActionScript 一样是区分大小写的. 先来看看二者的同性与差异性: 共同点: a).二者语法相似,都遵循ECMAScri

  • Flex include和import ActionScript代码

    在ActionScript中include和import有着截然不同的区别.Include是将一个文件中的代码拷贝到另一个文件中去,也就是将代码拷贝到include语句所在的位置上.Import是添加了对类或包的引用,这样你就可以访问其他的类中定义的对象和属性.通过import导入的代码文件必须存在于你导入的路径上.通过include导入代码文件,输入的文件地址必须与主文件要能在相对路径上寻找到,或者通过绝对路径也可以. 你可以在你的Flex应用程序中使用include语句和< mx:Scrip

  • ActionScript 3.0中用XMLSocket与服务器通讯程序(源码)

    复制代码 代码如下: // // CXMLSocket.as // // // Written by Leezhm, 20th Oct, 2008 // Contact : Leezhm@luxoom.cn // package { import flash.events.DataEvent; import flash.events.Event; import flash.events.IEventDispatcher; import flash.events.IOErrorEvent; imp

  • 基于vue2.0的活动倒计时组件countdown(附源码下载)

    这是一款基于vue2.0的活动倒计时组件,可以使用服务端时间作为当前时间,在倒计时开始和结束时可以自定义回调函数.   查看演示       下载源码 安装 npm install vue2-countdown --save 使用组件 首先在模板部分添加: <template> <div> <count-down v-on:start_callback="countDownS_cb(1)" v-on:end_callback="countDown

  • Qt实现TCP客户端和服务器通讯程序

    复习的心态过一遍之前基础的一些东西,Qt封装了QTcpServer和QTcpSocket两个类,其中QTcpServer继承自QObject,通过listen()函数监听传入的客户端连接,当Client连接上时,QTcpServer会发出newConnection的信号,在对应的槽函数中使用nextPendingConnection()拿到连接的客户端的句柄和信息. 而QTcpSocket则是读写数据的时候使用,过程很简单. 服务器流程:listen->newConnection->nextP

  • 自动写入文件上传到指定服务器SoftwareMeteringCLS.vbs源码

    复制代码 代码如下: ' FileName: SoftwareMeteringCLS.vbs ' //////////////////////////////////////////////////////////////////// If (WScript.ScriptName = "SoftwareMeteringCLS.vbs") Then Call demo_SoftwareMeteringCLS() ' ====================================

  • CentOS7.4 源码安装MySQL8.0的教程详解

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以下为本人2018.4.23日安装过程的记录.整个过程大概需要一个小时,make && make install过程需要的时间较长. 一.环境 CentOS7.4   64位  最小化安装 二.准备工作 1.安装依赖 yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio

  • 详解Android 通过Socket 和服务器通讯(附demo)

    Android 通过Socket 和服务器通讯,是一种比较常用的通讯方式,时间比较紧,说下大致的思路,希望能帮到使用socket 进行通信的人 (1)开启一个线程发送消息    SocketOutputThread 消息是放在队列里的,当有消息后,进入队列,线程唤醒,发送消息,并反馈发送是否成功的回调 (2)开启一个线程接受服务器消息 SocketInputThread 为了防止一直收数据,浪费电池的电,采用NIO的方式读socket的数据,这个是本文的关键 (3)开启一个线程,做心跳,防止so

  • CentOS 7.0服务器安装配置LAMP服务器(Apache+PHP+MariaDB)

    准备篇: CentOS 7.0系统安装配置图解教程 http://www.jb51.net/os/188487.html 一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2.安装iptab

  • IIS 6.0提示“服务器应用程序不可用”的解决办法

    今天在公司测试服务器上放了2个测试网站,iis居然报服务器应用程序不可用,把iis重启了,应用程序池也回收了,网站文件夹权限也改了,居然还是不行,好吧,下面我们来说下怎么解决的. 出错信息: 服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 Web 浏览器中的"刷新"按钮重试您的请求. 管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到.请检查此日志项以查明导致该错误发生的原因. 解决办法: 需要在II

  • Actionscript 3.0 鼠标事件

    关于Actionscript 3.0的事件机制,以后分模块一个一个介绍,最后形成一个完整的文档.看了第一章,就说说鼠标事件,顺便说下我遇到的一个问题.Actionscript 3.0鼠标事件无非就是监听和捕获鼠标事件,比如Click,DoubleClick等,AS3中鼠标事件包是在flash.events.MouseEvent中. 在这里贴一个简单ActionScript 3.0实现写字板程序代码,结合代码来理解鼠标的监听,捕获处理过程. 复制代码 代码如下: package { import

  • ActionScript 3.0 编程体验

    如图1所示.在这个版本中最为显著的改变就是增加了对ActionScript 3.0的支持,而界面和Flash 8相比并没有任何改动.Flash 9预览版只是为我们提供了一个ActionScript 3.0开发环境,相信在正式版中还有更多改变和新增功能.在本文中,我们将一起来体验使用Flash 9预览版编译ActionScript 3.0的新功能. 图1 一.新增功能 使用Flash 9预览版可以让我们编译包含或者导入到Fla文件中的ActionScript 3.0脚本,利用直接添加在关键帧上或与

随机推荐