as30_socket编程
ActionScript3.0 Socket编程(0) 我们在使用ActionScript3.0进行Socket编程的时候需要关注下面的问题,我 们将在今后的学习中逐个对下面的问题进行讨论,并尽量逐渐的改进我们的程序. 1.与Socket服务器建立连接. 2.向Socket服务器发送数据. 3.从Socket服务器读数据. 4.同Socket服务器进行握手,并确定收到了什么样的数据和如何处理这些数据. 5.与Socket服务器断开,或者当服务器想与你断开的时候发消息给你. 6.处理使用Sockets时候引发的错误. ActionScript3.0 Socket编程(1) 与Socket服务器建立连接. 解决方法:我们通过调用Socket.connect( )或者XMLSocket.connect( )方法并监听 网络连接的事件消息. 讨论:连接一台Socket服务器你需要确定两个信息,一个是Socket服务器的域名 或者IP地址,另一个是服务器监听的端口号.无论你使用的是Socket还是XMLSocket类的实例,连接请求都是完全的一 样的,两个类都是使用一个名叫connect()的方法,该方法有两个参数: host :该参数为字符串类型,可以是一个域名,例如““,也可以是 一个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 .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 madesocket.addEventListener( Event.CONNECT, onConnect );// Connect to the serversocket.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 .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 madesocket.addEventListener( Event.CONNECT, onConnect ); // Connect to the serversocket.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(“ ml“);获得的改策略文件不仅定义了允许的域名,还定义了端口号.如果你不设置 端口号,那么Flash Player默认为80端口(HTTP协议默认端口).在标签中可以使用逗号隔开设置多个端口号.下面这个例子就是允许 访问80和110端口.