`
hgfghe3
  • 浏览: 52586 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

flex与C# Socket通信

 
阅读更多

  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("正在与服务器断开连接..."); } } } 演示结果: 
  
分享到:
评论

相关推荐

    Flex Socket与C#通信

    - 为了保证数据的安全性,可以使用SSL/TLS加密Socket通信,Flex支持SecureSocket类实现加密连接。 - 使用线程管理,避免阻塞主线程,提高用户体验。 - 数据压缩和编码优化,减少网络传输的数据量,提高通信效率。...

    flex C# 基于socket 通讯 应用程序源码

    在本示例中,"flex C# 基于socket 通讯 应用程序源码"描述了一个项目,该项目结合了这两种技术,通过Socket通信实现客户端和服务器端的数据交互。 Socket通信是网络编程的基础,它允许两个网络应用程序之间建立连接...

    [转] flex与c#基于socket的实时互动网络游戏编程教程2

    通过研究这些代码,读者可以更好地理解如何在实际项目中应用Flex和C#的Socket通信。 总的来说,这个教程适合对网络编程有一定基础,希望学习如何构建实时互动网络游戏的开发者。通过学习,开发者可以掌握创建跨平台...

    [转] flex与c#基于socket的实时互动网络游戏编程教程一

    3. **Flex与Socket通信**:在Flex中,使用flash.net.Socket类进行网络通信。需要理解如何设置主机名和端口号,打开连接,以及使用readUTFBytes或readBytes方法读取服务器数据,writeUTF或writeBytes方法写入数据。 ...

    C# Socket单端口多种通讯协议服务

    - **事件驱动编程**:Socket通信通常是基于事件的,如数据接收、连接建立和关闭等,因此需要理解和使用事件处理模型。 - **错误处理和异常安全**:网络通信可能会遇到各种异常,如连接中断、数据包损坏等,需要妥善...

    SWF之间通信、Flex与SWF之间通信

    使用Socket通信**: 另一种实现C#与SWF通信的方法是通过Socket编程。这种方法更加灵活,但实现起来相对复杂。 总之,SWF文件之间的通信、Flex与SWF之间的通信以及C#与SWF之间的通信是实现复杂富互联网应用的重要...

    C#+Flex 在线聊天

    3. 在Flex中使用Socket类建立与C#服务端的连接,并加载策略文件。 4. 实现客户端事件监听,监听Socket的连接状态、接收数据事件。 5. 用户在客户端输入消息并点击发送,通过Socket将消息发送到服务端。 6. 服务端...

    用Socket 打造跨语言跨操作系统的网络MORPG游戏

    5. **Socket通信**: Socket是网络编程的基础,它提供了进程间的通信能力,使得客户端和服务器之间可以交换数据。在网络MORPG中,Socket用于建立连接、发送和接收游戏状态更新、玩家动作等信息,确保游戏的实时性。...

    .NET与flex的通讯方式

    Socket 提供了一种低级别的网络通信机制,允许 Flex 客户端与使用各种编程语言(如 C++, VB, C#, Java)开发的服务器端进行双向通信。 在 Flex 中,ActionScript 3.0 提供了 XMLSocket 类来实现 Socket 连接。...

    TestFlexSocket1

    XMLSocket类是Flex中实现Socket通信的主要类,它提供了基本的套接字功能,包括打开、关闭连接,以及读写数据。 **XMLSocket使用** 1. **创建Socket连接**:首先,你需要创建一个XMLSocket实例,并指定服务器的IP...

    Flex+,net 实现聊天室的功能

    Flex+NET实现聊天室功能是将Adobe Flex技术与Microsoft .NET框架相结合,创建一个实时通信的应用程序,使得用户可以通过Web浏览器进行在线聊天。这个过程涉及的技术主要包括Flex前端开发、.NET后端服务以及数据传输...

    FluorineFX安装程序 part1

    FluorineFX安装程序,100%好用。 FLEX&FLASH 网络通信必备。

    ActionScript3.0客户端拍照TCP发送到服务端.rar

    在本项目中,我们主要探讨的是如何利用...此外,由于Flash Player的安全策略,可能还需要处理跨域问题,确保客户端能够正确地与服务器通信。同时,考虑到性能和用户体验,优化图像处理和网络传输过程也是必不可少的。

    Action script 3.0高清晰版

    7. **网络编程**:包括HTTP请求、Socket通信以及本地文件系统的访问,这些都是构建Web应用的重要部分。 8. **错误处理和调试**:讲解如何使用try-catch语句处理运行时错误,以及使用Flash的内置调试器进行问题排查...

    Flash ActionScript 3.0学习指南

    同时,Socket和XMLSocket类提供了低级别的网络通信功能,用于创建实时的网络应用程序。 八、错误处理和调试 理解Error类和try...catch语句对于编写健壮的代码至关重要。学会使用ActionScript的内置调试工具,如...

    ActionScript 3.0 语言和组件参考

    - **Socket和URLLoader**:实现与服务器的双向通信,进行HTTP、HTTPS、FTP等请求。 7. **音频和视频** - **Sound和Video类**:处理音频和视频的播放、暂停、停止等操作。 - **NetStream和NetConnection**:用于...

    actionscript3

    6. **网络通信**:AS3提供了Socket、URLLoader和XMLSocket等类进行网络通信,可以实现与服务器的数据交换,例如JSON和XML的发送与接收。 7. **错误处理**:通过try...catch语句进行错误处理,提高程序的健壮性。AS3...

    ActionScript+3.0+语言和组件参考》概述(chm格式的帮组文档)

    7. **网络通信**:包括加载外部数据(XML、JSON、图像等)、使用Socket或URLLoader进行HTTP请求,以及WebSocket通信。 8. **错误处理**:讲解如何捕获和处理运行时错误,以及异常处理机制。 9. **音频和视频处理**...

Global site tag (gtag.js) - Google Analytics