close

以下內容轉載自神魂顛倒

我們在使用ActionScript3.0進行Socket編程的時候需要關註下面的問題,我們將在今後的學習中逐個對下面的問題進行討論,並盡量逐漸的改進我們的程序.
1.與Socket服務器建立連接.
2.向Socket服務器發送數據.
3.從Socket服務器讀數據.
4.同Socket服務器進行握手,並確定收到了什?樣的數據和如何處理這些數據.
5.與Socket服務器斷開,或者當服務器想與妳斷開的時候發消息給妳.
6.處理使用Sockets時候引發的錯誤.

[1]
ActionScript3.0 Socket編程(1)
與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端口.
復制內容到剪貼板
代碼:
<?xml version="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>

arrow
arrow
    全站熱搜

    阿酷 發表在 痞客邦 留言(0) 人氣()