(一):基于Socket的网络连接Flex也支持基于Socket的网络连接,服务器端可以是C++,VB,C#,Java等任一语言开发。监听一个网络端口便可以接收到Flex开发的客户端的连接。ActionScript3.0提供了通过Socket连接的方式与服务器端通信。这点是超越传统B/S结构的重要特征。这样使得网络通信可以即时连接,避免了HTTP协议无状态连接的弊病。ActionScript3.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端口。示例程序如下:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Net.Sockets;6usingSystem.IO;78namespaceFlashFlexDotNet9{10classProgram11{12staticvoidMain(string[]args)13{14TcpListenerlistener;1516try17{18listener=newTcpListener(8888);19}20catch(Exceptionex)21{22Console.WriteLine(ex.Message);23return;24}2526listener.Start();27Console.WriteLine(服务器启动,等待客户端连接.);28boolloop=true;2930while(loop)31{32Sockets=listener.AcceptSocket();33NetworkStreamns=newNetworkStream(s);34StreamReaderreader=newStreamReader(ns);35stringresult=string.Empty;36try37{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服务端进行通信。如本文前介绍,ActionScript3.0提供了基于Socket的网络连接类XMLSocket,我们可以直接使用它来开发基于Socket的网络通信。如下建立一个基与ActionScript3.0提供的XMLSocket的网络连接:1privatefunctionconnectionServer():void2{3xmlConn=newXMLSocket();4xmlConn.connect(127.0.0.1,8888);5}随后,便可以通过XMLSocket的实例方法send()向Socket服务端发送消息了。如下代码定义:1privatefunctiononSend():void2{3xmlConn.send(txtData.text+n);4}客户端完整代码:1?xmlversion=1.0encoding=utf-8?2mx:Applicationxmlns:mx==absolute3backgroundGradientAlphas=[1.0,1.0]4backgroundGradientColors=[#CDCAE6,#FFFFFF]5mx:Script6![CDATA[7importmx.controls.Alert;89privatevarxmlConn:XMLSocket;1011privatefunctionconnectionServer():void12{13xmlConn=newXMLSocket();14xmlConn.connect(127.0.0.1,8888);15}1617privatefunctiononSend():void18{19xmlConn.send(txtData.text+n);20}21]]22/mx:Script23mx:TextAreax=43y=34height=120width=263id=txtData/24mx:Buttonx=93y=180label=连接fontSize=12click=connectionServer()/25mx:Buttonx=190y=180label=发送fontSize=12click=onSend()/26/mx:Application如下为本文示例程序测试结果图:文章出处:(二):基于WebService的数据访问(上)本文以.NET平台下C#语言开发的WebService作为远程Webservice,详细介绍Flex与.NET的WebService的数据通信知识点;包括连接WebService,远程调用WebService方法,给WebService方法传递参数等相关知识点。三个标签的使用方法基本上是一样,这里就以mx:WebService标签为例进行介绍。首先看看如下代码块:1mx:WebServiceid=dataService2wsdl==false4mx:operationname=HelloWorldresult=onSuccess(event)fault=onFault(event)/5mx:operationname=GetBookfault=onFault(event)result=onObjectSuccess(event)/6/mx:WebServicewsdl属性指定到要访问的WebService的wsdl地址既可,其中定义了两个操作标签(mx:operation),分别对应于WebService中定义的WebMethod方法。result属性标记访问WebService方法成功后的处理函数;fault则相反,指定于访问失败的处理函数。以上两个mx:operation对应于WebService的WebMethod方法如下:1///summary2///返回字符串3////summary4///returns/returns5[WebMethod]6publicstringHelloWorld()7{8returnHelloWorld;9}1011///summary12///返回一个简单对象13////summary14///returns/returns15[WebMethod]16publicBookGetBook()17{18returnnewBook19{20Id=1,21Name=三国演义,22Author=罗贯中,23Price=10024};25}如上便是WebService方法定义和在Flex的客户端(mxml)通过mx:WebService标签来访问WebService的完整流程,下面我们来看看在Flex的客户端怎么去调用WebService所定义的方法:1mx:Script2![CDATA[3importmx.controls.Alert;4importmx.rpc.events.FaultEvent;5importmx.rpc.events.ResultEvent;67/**8*向WebService发起请求--调用HelloWorld方法,dataService为mx:WebService的id9**/10internalfunctiononRequest():void11{12dataService.HelloWorld();13}1415/**16*请求成功处理返回结果17**/18internalfunctiononSuccess(evt:ResultEvent):void19{20Alert.show(evt.result.toString());21}222324/**25*请求失败的处理函数26**/27internalfunctiononFault(evt:FaultEvent):void28{29Alert.show(访问WebService失败!);30}31]]32/mx:Script通过上面的调用,就可以完成一个Flex和.NETWebService的交互。当然我们在Flex的客户端调用WebService也是可以传递参数的,如下WebService的WebMethod定义:1///summary2///将传递进来的参数转化为大写字符返回3////summary4///paramname=value/param5///returns/returns6[WebMethod]7publicstringConvertToUpper(stringvalue)8{9returnvalue.ToUpper();10}通过在mx:WebService标签下配置mx:operation执行该方法就可以访问了,如下:1mx:operationname=ConvertToUpperresult=onSuccess(event)fault=onFault(event)/1/**2*向WebService发起请求3**/4internalfunctiononRequest():void5{6//dataService.HelloWorld();7dataService.ConvertToUpper(abcdefg);8}回到前面看看WebService的方法定义,其中一个方法GetBook是返回的一个Book对象,如果是返回的对象我们在Flex的客户端怎么来获取这个对象的值呢?详细见如下代码示例:1internalfunctiononObject():void2{3dataService.GetBook();4}56internalfunctiononObjectSuccess(evt:ResultEvent):void7{8//直接通过事件的result属性得到返回值,然后直接访问属性便OK9Alert.show(evt.result.Name);10}1112/**13*请求失败的处理函数14**/15internalfunctiononFault(evt:FaultEvent):void16{17Alert.show(访问WebService失败!);18}如上便完成了服务端的WebService返回对象到客户端的调用。(三):基于WebService的数据访问(下)在上一篇文章《(二):基于WebService的数据访问(上)》中介绍了通过mx:WebService标签来访