Flash Socket编程
来源:互联网 发布:淘宝美工面试题 编辑:程序博客网 时间:2024/04/30 09:49
现在来写一个flash 客户端,这里要解决的问题包括,
如何连接服务器,
如何监听服务器的内容,
如何发送信息服务器,
现在发一段简单的代码,这个代码很简单,功能不完整,为的是能够清晰一点让我们学习flash socket编程。
我们首先解决第一个问题:(其实在cookbook那里已经有说的)这里简单演示一下
一.连接服务器:
mysocket=new Socket();
mysocket.addEventListener(Event.CONNECT,OnConnect);
mysocket.connect(host,port);
host :是连接的ip端,这里连接本地所以使用localhost 或者127.0.0.1 就ok
port:端口号只有大于1024的时候基本上可以顺利,小于1024还要进行一些配置
监听连接是否成功:
private function OnConnect(e:Event):void
{
trace("连接成功");
mysocket.writeUTFBytes("Test successful2/n");
mysocket.flush();//发送数据
}
连接成功后,我们可以发送一个简单信息给服务器:
mysocket.writeUTFBytes("Test successful2/n");
mysocket.flush();//发送数据
注意,有个/n没有这个回车符,看看会有一些什么发生呢。
使用writeUTFBytes 是不可能立刻发送数据给服务器的,还要使用flush方法才能发送给服务器。
二.处理错误:
mysocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
private function ioErrorHandler(e:IOErrorEvent):void
{
trace("连接失败");
}
三.接收服务器返回的信息
mysocket.addEventListener(ProgressEvent.SOCKET_DATA , receivedata);
private function receivedata(e:ProgressEvent):void
{
trace("收到的字节数"+mysocket.bytesAvailable);
var msg:String;
while (mysocket.bytesAvailable)
{
msg+=mysocket.readMultiByte(mysocket.bytesAvailable,"utf8");
trace(msg);
}
}
这样我们可以接收到服务器发送来的信息,但是存在一个问题,接收数据会存在一个回车符合的问题,需要我们去解决。这里暂时不多说
看上面的
参考:
bytesAvailable : uint
{
trace("发送");
mysocket.writeUTFBytes("i am flash/n");
mysocket.flush();//发送数据
}
连接成功....
获取里面的内容......
内容:Test successful2
内容:i am flash
内容:i am flash
内容:i am flash
内容:i am flash
内容:i am flash
收到的字节数16
null你好我是服务器
要建立socket通讯,首先要建立socket连接,我们可以使用Socket.connect( )或XMLSocket.connect( )方法建立连接并监听connect事件确定连接是否建立。连接只需要2个参数,IP,和端口。
注意条件:
swf 和主机必须在同一个域;
网络上的swf不能连接本地服务器;
本地的swf 不能访问任何网络资源;
要允许域名交叉访问或连接低于1024的端口,需要提供cross-domain 策略文件。
如果要不同域中的flash相互访问可以通过flash.system.Security.loadPolicyFile( )读取:
Security.loadPolicyFile("cross-domain");
cross-domain策略文件例子:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domainpolicy.
dtd">
<cross-domain-policy>
<allow-access-from domain="*" to-ports="80,110" />
</cross-domain-policy>
建立完连接后就可以对服务器进行写入,通过调用write方法,可以写把数据写入缓冲池中,然后在调用flush()方法就可以把数据发送出去,这里是针对二进制的socket,如果是xml请调用send()方法。as3.0可以通过对不同的参数定义不同的写入函数:是writeBoolean( ), writeByte( ), writeBytes( ),
writeDouble( ), writeFloat( ), writeInt( ), writeMultiByte( ), writeObject( ), writeShort( ), write-
UnsignedInt( ), writeUTF( ), 和writeUTFBytes( ) 。根据函数名就可以知道需要传入的参数,这里就对socket.writeBytes(byteArray, 0, byteArray.length);进行说明,因为它可以传递一个数据 ,并制定数组的开始和结束位置进行写入。,writeUTFBytes( ):写入字节型的字符串,writeUTF:数字型的字符串。writeMultiByte()以指定编码写入字符串,socket.writeMultiByte("example", "unicode");
发送完数据后就要接受数据,因此我们可以通过ProgressEvent.SOCKET_DATA事件处理函数中读取数据,利用readBoolean():Boolean,readByte():int,readDouble():Number,readFloat():Number,readInt():int,readObject():*,readShort():int,readUnsignedByte():uint,readUnsignedInt():uint,readUnsignedShort():uint,readUTF():String,readBytes()无返回参数,readUTFBytes( )返回utf8数据。Socket对象接收的数据都是ASCII编码的文本,我们可以用readUTFBytes( )方法重新构造字符串,
readUTFBytes( )方法需要知道有多少个字节需要转换,用bytesAvailable属性指定字节数:
var string:String = socket.readUTFBytes(socket.bytesAvailable);
以上提到的是采用二进制的socket传输方式,如果采用xml的方式,那么触发的事件类型不同,它触发的是DataEvent.DATA事件,事件的data属性中包含传递来的数据,如果我们要读取xml就必须先将data中的字符串转换为xml格式,然后进行读取。
转自http://520pig.blogbus.com/logs/32821429.html
- Flash Socket编程
- Flash Socket 编程(1)
- Flash Socket 编程(2)
- Flash Socket 编程(3)
- ActionScript3.0 Socket编程【转载】flash socket编程
- 【转】Flash AS3.0 Socket编程
- flash socket
- flash编程
- Flash 编程
- Flash编程
- Socket 2 FLash
- flash xml socket
- flash socket通信问题
- flash socket 聊天(一)
- flash socket 聊天(二)
- flash C# Socket
- flash socket 框架
- Flash Socket安全问题
- C语言详解 之 集合的并
- 做项目时一点学习,记下了
- apache 配置图片防盗链
- 终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月
- tomcat5.5 整合 iis6.0
- Flash Socket编程
- Ubuntu Gnome快捷键大全
- flash 游戏设计笔记:删除对象
- 思友赋 并序
- sql分割字符串并分组统计数量
- 多文档菜单
- 全面认识UML类图元素
- flash 游戏设计笔记:递归清除bitmapData
- 在asp.net中下载文件时出现不明的未将对象引用到实例的异常