PS:以下的代码是转载的。
新版的flash很爽一点就是增加了对socket的支持,这意味着可以通过flash进行高性能的网络通信,例如做flash网游:)
既然flash支持,那么flex也不会例外。像flex这样的RIA正正更需要这种有效的网络通信能力来实现各种功能。
首先是一个.Net的服务器程序示例:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace MyTcpListener
{
class MyTcpListener
{
public static void Main()
{
TcpListener server = null;
try
{
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");

server = new TcpListener(localAddr, port);
server.Start();

Byte[] bytes = new Byte[256];
String data = null;

while (true)
{
Console.Write("等待连接");

TcpClient client = server.AcceptTcpClient();
Console.WriteLine("连接中");

data = null;

NetworkStream stream = client.GetStream();

int i;

while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.GetEncoding("gb2312").GetString(bytes, 0, i);
Console.WriteLine("收: {0}", data);

data = data.ToUpper();
byte[] msg = System.Text.Encoding.GetEncoding("gb2312").GetBytes(data);
stream.Write(msg, 0, msg.Length);
Console.WriteLine("发: {0}", data);
}
client.Close();
}
}
catch (SocketException e)
{
Console.WriteLine("异常: {0}", e);
}
finally
{
server.Stop();
}
Console.WriteLine("回车继续");
Console.Read();
}
}

}
然后对应是flex的客户端
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import SocketTest.CustomSocket;
private var socket:Socket;
private function StartTest():void
{
socket = new Socket("127.0.0.1",13000);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function CloseTest():void
{
if(socket!=null && socket.connected)
{
trace("socket.connected:"+socket.connected);
socket.close();
trace("socket.connected:"+socket.connected);
}
}
private function connectHandler(event:Event):void
{
trace("connectHandler: " + event);
socket.writeMultiByte(SendStr.text,"GB2312");
socket.flush();
}
private function socketDataHandler(event:ProgressEvent):void
{
trace("socketDataHandler: " + event);
var str:String=socket.readMultiByte(socket.bytesAvailable,"GB2312");
ReceiveStr.text = str;
}
]]>
</mx:Script>

<mx:Text text="发送" y="11" x="18" fontWeight="bold" color="#ffffff"/>
<mx:TextArea id="ReceiveStr" x="53" y="68"/>
<mx:Text text="接收" y="69" x="18" fontWeight="bold" color="#ffffff"/>
<mx:TextArea id="SendStr" y="10" x="53"/>
<mx:Button label="Close" click="CloseTest()" x="126" y="120"/>
<mx:Button label="Start" click="StartTest()" x="53" y="120"/>
</mx:Application>
重点讲一下flex的客户端
程序十分简单,界面上有Start和Close按钮,分别通过StartTest()和CloseTest()启动和关闭Socket
似乎flex的socket封装的很简单,只需通过AddEventListener为其添加两个事件:Event.CONNECT以及ProgressEvent.SOCKET_DATA,就可以为程序连接成功以及收到信息这两个情况进行处理了
程序通过这个语句发送数据
socket.writeMultiByte(SendStr.text,"GB2312");
另外在收到信息是通过这个语句接收数据
var str:String=socket.readMultiByte(socket.bytesAvailable,"GB2312");
由于这个例程是基于事件,似乎可以免除了flex设计者在多线程上的困扰——这样可以大幅度减少程序的复杂性,让我们更专注于构建功能本身。
新版的flash很爽一点就是增加了对socket的支持,这意味着可以通过flash进行高性能的网络通信,例如做flash网游:)
既然flash支持,那么flex也不会例外。像flex这样的RIA正正更需要这种有效的网络通信能力来实现各种功能。
首先是一个.Net的服务器程序示例:
using System;































































然后对应是flex的客户端
<?xml version="1.0" encoding="utf-8"?>










































重点讲一下flex的客户端
程序十分简单,界面上有Start和Close按钮,分别通过StartTest()和CloseTest()启动和关闭Socket
似乎flex的socket封装的很简单,只需通过AddEventListener为其添加两个事件:Event.CONNECT以及ProgressEvent.SOCKET_DATA,就可以为程序连接成功以及收到信息这两个情况进行处理了
程序通过这个语句发送数据
socket.writeMultiByte(SendStr.text,"GB2312");
另外在收到信息是通过这个语句接收数据
var str:String=socket.readMultiByte(socket.bytesAvailable,"GB2312");
由于这个例程是基于事件,似乎可以免除了flex设计者在多线程上的困扰——这样可以大幅度减少程序的复杂性,让我们更专注于构建功能本身。