精通Flex 3.0――4.7.2 基于Socket的连接

ActionScript 3.0提供了通过Socket连接的方式与服务器端通信。这点是超越传统B/S结构的重要特征。这样使得网络通信可以即时连接,避免了HTTP协议无状态连接的弊病。ActionScript 3.0使用XMLSocket类进行连接。

使用XMLSocket类进行Socket连接时,不能自动穿过防火墙。后面章节中,会讲到基于HTTP协议的RTMP协议,RTMP是可以穿过防火墙的协议。XMLSocket类常用的方法如表所示。

XMLSocket常用方法

方法名

参数

说明

connect

主机名称和端口号

通过指定的端口与远程指定的主机建立连接。

send

XML对象或字符串

向连接的主机发送XML对象或者字符串

close

关闭与远程主机的连接

如果要使用XMLSocket进行开发,必须创建一个远程服务器端的程序。这样的程序一般会使用JavaC++语言进行开发。下面通过一个Java作为服务端的Socket连接程序向大家讲解XMLSocket的使用。

1)在Eclipse环境下创建一个Java项目,命名为“SocketServer”。新建一个Java类命名为“XMLServerSocket”。打开“XMLServerSocket.java”文件修改代码如下。

import java.io.*;

import java.net.*;

public class XMLServerSocket {

         //声明一个静态连接类

         private static XMLServerSocket xmlServer;

         //声明一个Socket连接类

         ServerSocket serverSocket;

         //声明一个Socket连接

         Socket socketin;

         //声明一个BufferedReader,用于读取输入

         BufferedReader br;

         //声明一个PringStream作为输出

         PrintStream ps;

         //主函数

         public static void main(String[] args) {

         //实例化静态的连接

                   xmlServer=new XMLServerSocket();

         }

         // XMLServerSocket构造函数

         private XMLServerSocket() {

                   try {

                            //实例化连接类,并指明连接的端口为8800

                            serverSocket = new ServerSocket(8800);

                            //接收Socket的输入

                            socketin = serverSocket.accept();

                            //将输入转换为BufferReader

                            br = new BufferedReader(new InputStreamReader(socketin

                                               .getInputStream()));

                            //实例化ps作为输出

                            ps = new PrintStream(socketin.getOutputStream());

                            //输出字符到控制台

                            ps.println("Input EXIT for end");

                            //输出字符到客户端

                            out("Input EXIT for end");

                            //声明终止变量

                            boolean done = false;

                            //当变量为false时进行循环

                            while (!done) {

                                     //转换输入为字符串

                                     String str = br.readLine();

                                     //如果字符为空退出循环

                                     if (str == null) {

                                               done = true;

                                     } else {

                                     //输出字符

                                               out(str);

                                     //如果字符为“EXIT”退出循环

                                               if (str.trim().equals("EXIT")) {

                                                        done = true;

                                                        br.close();

                                               }

                                     }

                            }

                   } catch (Exception e) {

                            System.out.println(e);

                   }

         }

//输出字符到客户端

         private void out(String str) {

                   ps.println(str);

                   System.out.println(str);

         }

}

2)在Flex Bulider开发环境中创建一个Flex项目,命名为“XMLSocketStu”。打开XMLSocketStu.mxml修改代码如下所示。

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

         <mx:Script>

                   <![CDATA[

                            //引入包

                            import flash.net.XMLSocket;

                            private var xmlconnect:XMLSocket;

                            private function conectServer():void

                            {

                            //声明一个XMLSocket连接

                                     xmlconnect=new XMLSocket();

                            //连接到本机8800端口

                                     xmlconnect.connect("127.0.0.1",8800);

                            //添加端口数据的监听器

                                     xmlconnect.addEventListener(DataEvent.DATA, onData);

                            }

                            //当数据发送到端口响应函数

                            private function onData(event:DataEvent):void

                            {

                            //输出发送到客户端的内容

                                     Content.text=event.text+"/r";

                            }

                            //发送数据的函数

                            private function sendData()

                            {

                            //发送数据

                                     xmlconnect.send(Datasend.text+"/n");

                            }

                   ]]>

         </mx:Script>

<!--显示数据用的Text控件-->

         <mx:Text id="Content" width="271" height="116" horizontalCenter="0" verticalCenter="0"/>

<!--输入要发送的数据TextInput控件-->

         <mx:TextInput id="Datasend" horizontalCenter="0" verticalCenter="95"/>

<!--发送数据用的按钮-->

         <mx:Button label="发送" horizontalCenter="0" verticalCenter="121" click="sendData()"/>

<!--连接服务器的按钮-->

         <mx:Button label="连接" horizontalCenter="0" verticalCenter="-103" click="conectServer()"/>

</mx:Application>

注意:这里使用XMLSocket发送数据的时候一定要以“/n”作为结尾。

3)启动服务端程序,运行XMLServerSocket.java文件。然后运行客户端程序XMLSocketStu,如图所示。单击【连接】按钮,这是在控制台输出“Input EXIT for end”。如图所示。

  

在文本框中输入“你好”,单击【发送】按钮,效果如图所示。

通过XMLSocket可以将服务端与客户端的建立起数据连接的通道。这样就可以建立起即时通信的平台,大大增加了通信的时效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值