Socket 通信没什么好说,一个服务端,多个客户端,很容易搭建环境,网上代码一大片,这里主要的问题是as进行socket通信,必须跨A域B域,这时问题出现了,flash player会阻止你跨域访问,这时,flash player会自动检查安全策略。
在Adobe Flash Player升级到9.0.124后,由于安全策略的更改,使得在socket或xmlsocket的应用里,原先如用http方式加载安全策略的手段不能继续使用了,类似此类应用必须使用xmlsocket:
flashplayer的安全策略检测过程如下:
1,首先检测目标服务器的843端口是否提供安全策略
2,如果843端口没有检测到策略,则检测actionscript是否使用了
Security.loadPolicyFile(xmlsocket:ip:端口)//使用其他特定端口提供安全策略
3,检测目标服务器目标端口是否提供安全策略
C#利用socket提供安全策略,我们可以通过多种方式实现,如Window应用窗台,控制台应用程序,或者打包成服务等等
下面以控制台为例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.Collections; namespace serverSocket { class Program { private Thread Beginthread, receivethread; private Socket serverSocket, ClientSocket; //主程序 static void Main(string[] args) { Program program = new Program(); IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 843);// 可以尝试 Security.loadPolicyFile(xmlsocket:ip:端口),使用其他的端口 program.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); program.serverSocket.Bind(remotePoint); program.serverSocket.Listen(10); Console.WriteLine("Listening..."); program.Beginthread = new Thread(new ThreadStart(program.BeginListen)); program.Beginthread.Start(); } //循环监听 private void BeginListen() { while (true) { ClientSocket = serverSocket.Accept(); receivethread = new Thread(new ThreadStart(receive)); receivethread.Start(); } } //等待客户端请求 private void receive() { IPEndPoint clienTep = (IPEndPoint)ClientSocket.RemoteEndPoint; int bytes = 0; while (true) { Byte[] buffer = new Byte[24]; bytes = ClientSocket.Receive(buffer); if (bytes > 0) { string clientCommand = Encoding.UTF8.GetString(buffer, 0, bytes); String policy = "\0"; buffer = System.Text.Encoding.UTF8.GetBytes(policy.ToCharAr ray()); ClientSocket.Send(buffer, buffer.Length, 0); } else { break; } } ClientSocket.Close(); receivethread.Abort(); } } }
as socket程序更简单如下 package Socket { import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.net.Socket; import flash.utils.ByteArray; public class SPSocket { /** * Socket 套接字 */ public var socket:Socket=new Socket(); /** * 域名或者主机Ip */ public var host:String="localhost"; /** * 通讯端口 */ public var port:int=1111; /** * 接收数据的类型 */ public var RecieveDataType:String=""; /** * 发送数据的类型 */ public var SendDataType:String=""; /** * 通讯状态 */ private var stateMap:Object; /** * 当前通讯状态 */ private var currentState:int; /** * 字符类型 */ public static const CHARS:String="chars"; /** * 字节类型 */ public static const BYTES:String="bytes"; public function SPSocket() { socket.addEventListener(Event.CONNECT,onConnect); socket.addEventListener(Event.CLOSE,onClose); socket.addEventListener(IOErrorEvent.IO_ERROR,onIo Error); socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); } public function connect():void{ if(!socket.connected){ socket.connect(host,port); } } public function close():void{ socket.close(); } /** * 处理Socket接收数据 */ private function onSocketData(e:ProgressEvent):void{ if(RecieveDataType==BYTES){ var bytes:ByteArray; socket.readBytes(bytes); /*trace("收到的数据:"+socket.bytesAvailable+"b/s"); while(socket.bytesAvailable){ var data:int=socket.readByte(); trace(data); }*/ }else if(RecieveDataType==CHARS){ var recieveData:String=socket.readUTFBytes(socket.byte sAvailable); } } /** * 写入数据 */ public function WriteDate():void{ if(socket.connected){ } } private function onConnect(e:Event):void{ trace("正在连接服务器..."); } private function onClose(e:Event):void{ trace("正在与服务器断开连接..."); } private function onIoError(e:Event):void{ trace("正在与服务器断开连接..."); } } } 演示结果:
发表评论
-
iphone 字符串 nsstring用法
2012-07-06 09:51 6501.4.1 字符串 可能最常使用的类就是NSStr ... -
正则表达式测试工具、网页版
2012-07-06 09:45 704有时候为了测试正则表达式、临时自己写了这么一个、我对于JS ... -
Php正则表达式
2012-07-06 09:37 5801、 perl兼容正则表达式: 模式修 ... -
如何修改酷我软件中的皮肤图片为自己的图片?
2012-07-06 09:30 604如何修改酷我中的 ... -
window.opener 的用法
2012-07-05 20:45 597window.open()支持环境: JavaScript ... -
Swing组件集合的事件处理(四)
2012-07-03 13:43 600如果我们正在创建我们自己的组件并且希望这些组件触发事件,我 ... -
Flex 与java 通信,通过BlazeDS
2012-07-02 10:25 5211. Server代码 package com.east ... -
FLEX与javascript交互
2012-07-02 10:25 547用Flex来调用同一页面中的javascript函数。调用 ... -
twaver-flex效率与性能测试
2012-07-02 10:25 591测试环境: 测试一 节点:创建图片节点; 连 ... -
Flex xml的实用操作
2012-07-02 10:25 565XML类包含用于处理XML对象的工作方法和属性。 XML类 ... -
OpenScales入门教程:第二节 : 创建第一张地图
2012-07-01 00:03 609你需要把第一 ... -
flex与twisted通过socket通信
2012-07-01 00:03 597flex端代码 0){ bMsg.writeUTFB ... -
Flex Socket编程
2012-07-01 00:03 599比较懒,比较少上csdn的,如果发现留言给我没有回复,望见 ...
相关推荐
研究flex的通信问题,写了一个flex的Socket与C#通信例子,类似QQ软件的客户端和服务器端。
Flex与Java Socket通信 很适用的例子啊
flex C# 基于socket 通讯 应用程序源码 客户度用flex 服务端用winform 的通讯程序,可以互发消息。
Flex 的socket通信 提供实例代码
flex与JAVA的SOCKET通信,详细讲解flex与JAVA的SOCKET通信
Flex和java的socket通信 Flex和java的socket通信
Flex与C#(WinForm)通过FlashPlayer通讯的例子
Flex与Java实现通信,Flex与Java实现通信,Flex与Java实现通信
1.背景:Flex Socket通信及安全策略,使用flex实现客户端,java实现服务端; 2.重点解决安全策略问题:将flash发布为html格式后,本地访问页面后,一般可以与服务器进行socket通信;但是部署到tomcat服务器上后无法...
flex+java的socket通信,文本中说明了文件构成,可实现基本的flex与java基于socket的通信
FLEX与C#、PHP、JAVA语言通信全面解析
主要是通过flex客户端与socket服务端之间的通信,实现在线聊天功能
web flex应用通过socket与C++编写的服务端进行通讯的一个例子,包括服务端代码(VC编译),flex的mxml文件(flex3builder新建web flex工程后,用该mxml文件直接替换src里的mxml文件即可)
在c#中用flex做界面展示时,想要从c#调用flex的方法,或者flex调用c#方法,本文中详细描述清楚了。
flex与C# winform交互,实现了flex与winform窗体互相传递数据功能
Flex 与服务器端通信 demo 包括flex 源码 和c#服务器端源码
Flex3+Socket编程示例;包括配置,聊天室源代码
Flex和java的socket通信 连接 单向通信 多客户通信 一个简单的聊天室
flex与java通信
flex 和java 之间的相互通信