您的位置:首页 > 其它

flex flash socket通信实例

2012-01-31 14:59 471 查看
 
Socket 套接字连接允许Flash播放器通过指定的端口与服务器通信,socket连接与其他通信技术

最大的不同是socket连接在数据传输完成后不会自动关闭。

当socket连接创建后,连接会一直保持,直到客户端(Flash播放器)和服务端主动关闭,因此

服务器可在任何时间不用客户端请求即可发送数据给客户端。

Socket连接被普遍用于创建多用户应用程序,比如说一个在线聊天室,它有一个服务端程序和

无数个Flash客户端组成。每次客户端发送消息给服务器,服务器检测那些用户可以收到这些消

息并把消息传给指定客户端,这种情况下接收客户端并没有提前请求数据而是通过服务器主动

推送数据的。当客户端关闭时,服务端提示其他客户端某客户端已离线。

Flash播放器提供了两种类型的socket连接。一种是早期版本就有的XMLSocket,Flash播放器9增

加了二进制socket连接。

使用flash.net.XMLSocket类创建XML数据格式的socket连接,使用flash.net.Socket类创建二进制数

据格式socket连接。

XML socket连接以XML数据报交换数据,二进制socket连接是ActionScript 3.0新增的功能,相比

之下更低级,但功能很强大,几乎可以连接任意类型的socket服务端程序。例如二进制sockets 可

连接邮件服务端程序(POP3, SMTP, 和IMAP), 新闻服务器(NNTP), 聊天室服务器或远程桌面

VNC服务器( RFB)。

不管是哪种类型的socket 连接,其通信方式都是异步的,也就是说你不能直接从socket 连接中

读取数据,而是通过事件处理函数进行读取处理。
以上问第三方翻译
下面贴出我写的一段代码没有什么实在意思仅为学习之用,写得不好不请各位多指教
<?xml version=
"1.0"
encoding=
"utf-8"
?>

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

verticalAlign=
"middle"

fontSize=
"12"
creationComplete=
"onInit()"
>

    
<mx:ViewStack id=
"viewstack1"
width=
"454"

height=
"338"
selectedIndex=
"0"
>

        
<mx:Canvas
label
=
"View 1"
width=
"100%"

height=
"100%"
>

            
<mx:TitleWindow width=
"100%"
height=
"100%"

layout=
"absolute"
title=
"连接设置"
>


                
<mx:Button x=
"181"
y=
"186"

label
=
"连    接"
click=
"onConnect()"
id=
"btnCon"
/>

                
<mx:TextInput x=
"181"
y=
"31"

id=
"txtHost"
text=
"127.0.0.1"
width=
"184"
/>

                
<mx:TextInput x=
"181"
y=
"94"

id=
"txtPort"
width=
"184"
text=
"6000"
/>

                
<mx:Label x=
"74"
y=
"31"

text=
"链接地址:"
/>

                
<mx:Label x=
"74"
y=
"94"

text=
"连接端口:"
/>

                
<mx:Button x=
"297"
y=
"186"

label
=
"清    空"
click=
"onEmpty()"
/>

            
</mx:TitleWindow>

        
</mx:Canvas>

        
<mx:Canvas
label
=
"View 1"
width=
"100%"

height=
"100%"
>

            
<mx:TitleWindow width=
"100%"
height=
"100%"

layout=
"absolute"
title=
"消息窗口"
>


                
<mx:TextArea x=
"10"
y=
"10"

width=
"414"
height=
"176"
id=
"txtRec"
/>

                
<mx:Button x=
"160"
y=
"262"

label
=
"发    送"
fontSize=
"12"

click=
"onSendData()"

/>

                
<mx:Button x=
"260"
y=
"262"

label
=
"断    开"
fontSize=
"12"

click=
"onClose()"
/>

                
<mx:TextInput x=
"10"
y=
"194"

width=
"414"
id=
"txtSend"
height=
"45"
/>

                
<mx:Text x=
"201"
y=
"202"

text=
"正在断开,请稍后..."

visible=
"false"
id=
"msg"
/>

                
<mx:Button x=
"355"
y=
"262"

label
=
"关    闭"
click=
"onCloseWindow()"
/>

            
</mx:TitleWindow>

        
</mx:Canvas>

    
</mx:ViewStack>

     
 
    
<mx:Script>

        
<![CDATA[

            
import
mx.controls.Alert;

            
import
flash.net.Socket;

            
import
flash.utils.ByteArray;

            
import
flash.events.SecurityErrorEvent;

            
import
flash.events.IOErrorEvent;

            
import
flash.events.ProgressEvent;

             
 
            
//全局变量

            
private
var

socket:Socket=
new
Socket();

            
//连接

            
private
function

onInit():
void

            
{

                
socket.addEventListener(Event.CONNECT,connect);

                
socket.addEventListener(Event.CLOSE,onClosed);

                
socket.addEventListener(IOErrorEvent.IO_ERROR,onIoError);

                
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSeurity);

                
socket.addEventListener(ProgressEvent.SOCKET_DATA,onReceiveData);

            
}

             
 
            
private
function

connect(e:Event):
void

            
{

                
this
.viewstack1.selectedIndex=
1
;

            
}

             
 
            
private
function

onClosed(e:Event):
void

            
{

                 
 
            
}

             
 
            
//连接服务器

            
private
function

onConnect():
void

            
{

                
var
host:
String
=
this
.txtHost.text;

                
var
port:
Number

=
Number
(
this
.txtPort.text);

                
if
(!(host&&port))

                
{

                    
Alert.show(
"服务器地址和端口不能为空!"
,
"提示"
);

                    
return
;

                
}

                
socket.connect(host,port);

            
}

            
//关闭服务器

            
private
function

onClose():
void

            
{

                
socket.close();

                
this
.viewstack1.selectedIndex=
0
;

            
}

             
 
            
//IO错误

            
private
function

onIoError(evt:IOErrorEvent):
void

            
{

                
Alert.show(evt.text,
"IO错误!"
);

            
}

            
//安全策略错误

            
private
function

onSeurity(evt:SecurityErrorEvent):
void

            
{

                
Alert.show(evt.text,
"安全策略错误"
);  

            
}

             
 
            
//发送

            
private
function

onSendData():
void

            
{

                
var
buff:ByteArray=
new
ByteArray();

                
buff.writeUTF(
this
.txtSend.text);

                
socket.writeBytes(buff,
0
,buff.length);

                
socket.flush();
//发送数据 

            
}

            
//接收

            
private
function

onReceiveData(evt:ProgressEvent):
void

            
{

                
while
(socket.bytesAvailable)

                
{

                    
this
.txtRec.text+=socket.readMultiByte(socket.bytesAvailable,
"utf8"
)+
"\n"
;

                
}

            
}

             
 
            
/**ui操作**/

            
//清空

            
private
function

onEmpty():
void

            
{

                
this
.txtHost.text=
""
;

                
this
.txtPort.text=
""
;

                
this
.txtHost.setFocus();

            
}

            
//关闭浏览器

            
private
function

onCloseWindow():
void

            
{

                
var
request:URLRequest =
new
URLRequest(
"javascript:window.close()"
);

                
navigateToURL(request,
"_self"
);

            
}

             
 
        
]]>

    
</mx:Script>

</mx:Application>

 

 

转自 : http://www.cnblogs.com/wangleicode/archive/2010/12/22/1914054.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息