关于 AS3 Socket 通信基础(六)

6.处理使用Sockets时候引发的错误.
     在程序里通常都会使用try/catch处理I/O和EOF(end of file)错误.
     Socket和XMLSocket类对错误的处理很类似.不过,当调用connect()方法的时候,在下面任何一个条件成立的情况下Socket和XMLSocket对象会抛出一个类型为SecurityError的错误.
、* 该.swf未通过本地安全认证.
、* 端口号大于655535.
     当调用XMLSocket对象的send()或者Socket对象的flush()的时候,如果socket还没有连接这两个方法都会抛出一个类型为 IOError的错误.尽管你可以将send()或者flush()方法放入try/catch结构块中,你也不能依赖于try/catch结构块作为你 应用程序的逻辑.更好的办法是,在调用send()或者flush()方法之前使用一个if语句首先判断一下Socket对象的connected属性是 否为True.
     例如,下面的代码使用了if语句作为程序逻辑的一部分,当Socket对象当前不是连接状态就调用 connectToSocketServer()方法.但是我们依然需要将flush()方法放到try/catch语句块中.通过使用 try/catch语句块将flush()方法抛出的错误写入到日志中:

  1. if ( socket.connected ) {
  2.     try {
  3.         socket.flush( );
  4.     }
  5.     catch( error:IOError ) {
  6.         logInstance.write( "socket.flush error\n" + error );
  7.     }
  8. }
  9. else {
  10.     connectToSocketServer( );
  11. }
复制代码

所有的Socket类的read方法都能够抛出EOFError和IOError类型的错误.当你试图读一个数据,但是没有任何可用数据将触发EOF错误.当你试图从一个已经关闭的Socket对象中对数据时将会抛出I/O错误.
    除了Socket和XMLSocket类的方法能够抛出的错误以外,这些类的对象还会分发错误事件.有两种基本的错误事件类型,他们分别由 socketIOError和securityError错误引起.IOError事件为IOErrorEvent类型,当数据发送或接收失败触发该事 件.SecurityError事件是SecurityErrorEvent类型,当一个Socket尝试连接一个服务器,但由于服务器不在安全沙箱范围 之内或者端口号小于1024的时候触发该错误事件.
注意:这两种安全策略引起的错误都可以通过跨域访问策略文件解决.

猜你喜欢

转载自ch-kexin.iteye.com/blog/2197747
今日推荐