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>
