您的位置:首页 > 其它

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

2008-04-28 14:56 459 查看

ActionScript 3.0提供了通过Socket连接的方式与服务器端通信。这点是超越传统B/S结构的重要特征。这样使得网络通信可以即时连接,避免了HTTP协议无状态连接的弊病。ActionScript 3.0使用XMLSocket类进行连接。
使用XMLSocket类进行Socket连接时,不能自动穿过防火墙。后面章节中,会讲到基于HTTP协议的RTMP协议,RTMP是可以穿过防火墙的协议。XMLSocket类常用的方法如表所示。
表 XMLSocket常用方法
方法名
参数
说明
connect
主机名称和端口号
通过指定的端口与远程指定的主机建立连接。
send
XML对象或字符串
向连接的主机发送XML对象或者字符串
close

关闭与远程主机的连接
如果要使用XMLSocket进行开发,必须创建一个远程服务器端的程序。这样的程序一般会使用Java或C++语言进行开发。下面通过一个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可以将服务端与客户端的建立起数据连接的通道。这样就可以建立起即时通信的平台,大大增加了通信的时效性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: