flex与.Net的socket通信

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设计者在多线程上的困扰——这样可以大幅度减少程序的复杂性,让我们更专注于构建功能本身。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值