Flash/Flex也支援基於Socket的網路連接 ,伺服器端可以是C++,VB,C#,Java等任一語言開發。監聽一個網路連接埠便可以接收到Flash/Flex開發的用戶端的串連。
ActionScript 3.0提供了通過Socket串連的方式與伺服器端通訊。這點是超越傳統B/S結構的重要特徵。這樣使得網路通訊可以即時串連,避免了HTTP協議無狀態串連的弊病。ActionScript 3.0使用XMLSocket類進行串連。需要注意的是使用XMLSocket類進行Socket串連時,不能自動穿過防火牆。要想穿過防火牆串連,則需要使用基於HTTP協議的RTMP協議。
通過查閱Adobe提供的API文檔可以瞭解到,XMLSocket提供了四個公開方法:
1、XMLSocket(host:String=null,port:int=0)--建立一個新的XMLSocket對象。
2、close():void--關閉一個XMLSocket。
3、connect(host:String,port:int):void--串連到指定的TCP連接埠。
4、send(object:*):void--將資料發送到串連服務端。
OK,瞭解這些後我們就可以用XMLSocket來開發基於Socket的網路及時通訊應用。下面通過C#提供一個Socket的服務端,並監聽8888連接埠。樣本程式如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1usingSystem;
2usingSystem.Collections.Generic;
3usingSystem.Linq;
4usingSystem.Text;
5usingSystem.Net.Sockets;
6usingSystem.IO;
7
8namespaceFlashFlexDotNet
9{
10classProgram
11{
12staticvoidMain(string[]args)
13{
14TcpListenerlistener;
15
16try
17{
18listener=newTcpListener(8888);
19}
20catch(Exceptionex)
21{
22Console.WriteLine(ex.Message);
23return;
24}
25
26listener.Start();
27Console.WriteLine("伺服器啟動,等待用戶端串連.");
28boolloop=true;
29
30while(loop)
31{
32Sockets=listener.AcceptSocket();
33NetworkStreamns=newNetworkStream(s);
34StreamReaderreader=newStreamReader(ns);
35stringresult=string.Empty;
36try
37{
38result=reader.ReadLine();
39Console.WriteLine(result);
40}
41catch(Exceptionex)
42{
43Console.WriteLine(ex.Message);
44}
45}
46}
47}
48}
49
伺服器端Socket已經準備完畢,下面看看用戶端的ActionScript的XMLSocket怎麼來建立Socket串連與.net的Socket服務端進行通訊。
如本文前介紹,ActionScript 3.0提供了基於Socket的網路連接類XMLSocket,我們可以直接使用它來開發基於Socket的網路通訊。如下建立一個基與ActionScript 3.0提供的XMLSocket的網路連接:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1privatefunctionconnectionServer():void
2{
3xmlConn=newXMLSocket();
4xmlConn.connect("127.0.0.1",8888);
5}
隨後,便可以通過XMLSocket的執行個體方法send()向Socket服務端發送訊息了。如下代碼定義:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1privatefunctiononSend():void
2{
3xmlConn.send(txtData.text+"\n");
4}
用戶端完整代碼:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1<?xmlversion="1.0"encoding="utf-8"?>
2<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"
3backgroundGradientAlphas="[1.0,1.0]"
4backgroundGradientColors="[#CDCAE6,#FFFFFF]">
5<mx:Script>
6<![CDATA[
7importmx.controls.Alert;
8
9privatevarxmlConn:XMLSocket;
10
11privatefunctionconnectionServer():void
12{
13xmlConn=newXMLSocket();
14xmlConn.connect("127.0.0.1",8888);
15}
16
17privatefunctiononSend():void
18{
19xmlConn.send(txtData.text+"\n");
20}
21]]>
22</mx:Script>
23<mx:TextAreax="43"y="34"height="120"width="263"id="txtData"/>
24<mx:Buttonx="93"y="180"label="串連"fontSize="12"click="connectionServer()"/>
25<mx:Buttonx="190"y="180"label="發送"fontSize="12"click="onSend()"/>
26</mx:Application>