原文地址:http://blog.csdn.net/LX10752p/archive/2011/04/27/6366526.aspx

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应用窗台,控制台应用程序,或者打包成服务等等

下面以控制台为例子

view plaincopy to clipboardprint?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();              }          }          //等待客户端请求 <policy-file-request/>          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 = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"1111\" /></cross-domain-policy>\0";                      buffer = System.Text.Encoding.UTF8.GetBytes(policy.ToCharArray());                      ClientSocket.Send(buffer, buffer.Length, 0);                  }                  else                  {                      break;                  }              }              ClientSocket.Close();              receivethread.Abort();          }      }  }   
as socket程序更简单如下view plaincopy to clipboardprint?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,onIoError);              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.bytesAvailable);              }          }          /**          * 写入数据          */          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("正在与服务器断开连接...");          }      }  }   演示结果:

收藏于 2011-05-25
来自于百度空间

flex与C# Socket通信的更多相关文章

  1. Flex通信-与Java实现Socket通信实例

    Flex通信-与Java实现Socket通信实例  转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...

  2. [转]Flash Socket通信的安全策略

    昨天做测试的时候遇到一个问题,做好的SWF在Flash AS3中调试通过,但是发布到html中之后就无法得到数据了.查了一些资料之后找到了解决办法.这里感谢 剑心 提供帮助,以及同事若水三千提供Jav ...

  3. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  4. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  5. Socket通信类

    package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  6. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  7. socket通信

    socket通信 一:socket基于Tcp连接,数据传输有保证 二:socket连接的建立过程: 1:服务器监听 2:客户端发出请求 3:建立连接 4:通信 三:一个简单的例子:服务器端每隔一段时间 ...

  8. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  9. .NET开源高性能Socket通信中间件Helios介绍及演示

    一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...

随机推荐

  1. MVC打包压缩JS&CSS文件调试时过滤了一些文件

    BundleTable.这个确实是比较好用,打包并压缩了CSS,使之加载时减少流量. 但是在调试的时候会疑问为何有很多JS,CSS文件无法打包,其实是因为调试时VS自动过滤了如下文件:   后台跟踪了 ...

  2. WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

    注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...

  3. SDK Manager.exe 无法启动,一闪而过的解决办法

    删掉 C:\Windows\system32\ 下的 java.exe.javaw.exe.javaws.exe 即可解决.(转载)

  4. SQL SERVER将指定表中的指定字段按照(,)逗号分隔

    不开心呀,早知道不跳了,一跳跳坑里来了. 使用方式: DECLARE @ConsigneeAddressId INT; SET @ConsigneeAddressId = 1; SELECT  * F ...

  5. Ubuntu系统配置日志/var/log/message

    ubuntu系统默认不生成/var/log/messages文件,有时候想查看相关日志就很不方便,于是我们可以设置使系统生成此文件. 1.先安装 apt-get install rsyslog2.用v ...

  6. 用Ueditor存入数据库带HTML标签的文本,从数据库取出来后,anjular用ng-bind-html处理带HTML标签的文本

    ng.module('index-filters', []) .filter('trustHtml', function ($sce) { return function (input) { retu ...

  7. 【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋

    Description 黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是 ...

  8. BeanUtils的日期问题

    //注册日期类型转换器 //第一种  自定义方法            ConvertUtils.register(new Converter(){                //第一个参数是目标 ...

  9. Chrome调试(转)

    原文地址:http://blog.csdn.net/chenmoquan/article/details/44943245#comments 觉得写的很适合web开发的新手 Chrome 的开发者工具 ...

  10. H5的本地存储

    localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...