没有合适的资源?快使用搜索试试~ 我知道了~
flash as3 socket编程基础
5星 · 超过95%的资源 需积分: 10 6 下载量 132 浏览量
2012-03-03
14:23:24
上传
评论 1
收藏 154KB PDF 举报
温馨提示
试读
13页
介绍socket编程的基础,不可错过.从简单的介绍,由浅到深,理论结合实践让你更好学习
资源推荐
资源详情
资源评论
ActionScript3.0 Socket编程
与Socket服务器建立连接
解决方法:
我们通过调用 Socket.connect( )或者 XMLSocket.connect( )方法并监听网络连接的事件消
息.
讨论:
连接一台 Socket 服务器你需要确定两个信息,一个是 Socket 服务器的域名或者 IP 地址,
另一个是服务器监听的端口号.
无论你使用的是 Socket 还是 XMLSocket 类的实例,连接请求都是完全的一样的,两个类
都是使用一个名叫 connect()的方法,该方法有两个参数:
host :
该参数为字符串类型,可以是一个域名,例如"www.example.com",也可以是一个 IP 地址,例如
"192.168.1.101".如果 Socket 服务器与你该 Flash 影片发布的 Web 服务器是同一个,该参数为
Null.
port :
该参数为一个表示 Socket 服务器监听端口的 int 值.该值最小为 1024.除非在服务器中有
一个 policy 文件,用于指定允许端口号小于 1024.
因为 Flash
Socket 编程是一个异步的过程,connect()方法不会等到一个连接完成后再执行下一行代码的
执行.如果你想在一个连接完全执行完之前与一个 Socket 完全绑定,那么你将会得到一个意想
不到的结果,并且你当前的代码将不能工作.
在尝试一个新的 Socket 连接的时候我们最好先添加一个连接事件监听器.当一个连接建立成
功,Socket 或者 XMLSocket 会发出一个连接事件,这就可以让你知道交互已经准备好了.
下面举了一个 Socket 实例与本地 Socket 服务器的 2900 端口建立连接的例子:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class SocketExample extends Sprite {
private var socket:Socket;
public function SocketExample( ) {
socket = new Socket( );
// Add an event listener to be notified when the connection
// is made
socket.addEventListener( Event.CONNECT, onConnect );
// Connect to the server
socket.connect( "localhost", 2900 );
}
private function onConnect( event:Event ):void {
trace( "The socket is now connected..." );
}
}
}
如果你想通过 XMLSocket 与服务器建立连接代码也是基本一样的.首先你创建了一个连接事
件监听器,然后调用 connect()方法.所不同的是 Socket 实例改为了 XMLSocket:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.XMLSocket;
public class SocketExample extends Sprite {
private var socket:XMLSocket;
public function SocketExample( ) {
socket = new XMLSocket( );
// Add an event listener to be notified when the connection is made
socket.addEventListener( Event.CONNECT, onConnect );
// Connect to the server
socket.connect( "localhost", 2900 );
}
private function onConnect( event:Event ):void {
trace( "The xml socket is now connected..." );
}
}
}
如果连接失败,可那是下面两种原因的一种:一种是连接立即失败和运行时错误,另一种是如
果无法完成连接从而产生一个 ioError 或者 securityError 事件.关于错误事件处理信息的描述,
我们打算改日讨论.
请牢记,当与一个主机建立一个 Socket 连接时,Flash Player 要遵守如下安全沙箱规则.
1.Flash的.swf 文件和主机必须严格的在同一个域名,只有这样才可以成功建立连接.
2.一个从网上发布的.swf 文件是不可以访问本地服务器的.
3.本地未通过认证的.swf 文件是不可以访问任何网络资源的.
4.你想跨域访问或者连接低于 1024 的端口,必须使用一个跨域策略文件.
如果尝试连接未认证的域或者低端口服务,这样就违反了安全沙箱策略,同时会产生一个
securityError 事件.这些情况都可以通过使用一个跨域策略文件解决.无论是 Socket 对象还是
XMLSocket 对象的策略文件,都必须在连接之前通过使用 flash.system.Security.loadPolicyFile()
方法载入策略文件.具体如下:
Security.loadPolicyFile("http://www.rightactionscript.com/crossdomain.xml");
获得的改策略文件不仅定义了允许的域名,还定义了端口号.如果你不设置端口号,那么
Flash
Player 默认为 80 端口(HTTP 协议默认端口).在<allow-access-from>标签中可以使用逗号隔开
设置多个端口号.下面这个例子就是允许访问 80 和 110 端口.
<?xmlversion="1.0"?><!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy>
<allow-access-from domain="*" to-ports="80,110" /></cross-domain-policy>
从Socket服务器读数据
解决方法:
对于 Socket 实例,先收到 socketData 事件,然后调用如下两个方法的一个,
比 如 ,readByte() 或 者 readInt(), 在 事 件控制器中确定不会去读过去的
bytesAvailable.
对于 XMLSocket 实例,先收到 data 事件,然后解析从事件控制器内部装载的
XML 数据.
讨论:
从一个 socket 连接接收的数据依赖于你使用的 Socket 的类型.socket 和
XMLSocket 都可以从服务器接受到数据,但是它们处于不同重量级的技术.让我
们在讨论 XMLSocket 之前先关注下 Socket 类.
我都知道 socket 在 Flash 中是一个异步的行为.因此,它就不能简单的创建
一个 Socket 连接,然后就立刻尝试去读取数据.read 方法不能等到从服务器传过
来数据之后在返回.换句话说,你只能在客户端从服务器载入所有数据之后才可
以读取数据.在数据可用之前读数据会产生一个错误.
通过 socketData 事件广播到 Socket 实例,这样我们就可以知道什么时候数
剩余12页未读,继续阅读
资源评论
- zhangy1106152013-02-04确实有些简单与基础,不过还是谢谢楼主。
chengmingxing
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功