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 6841.4.1 字符串 可能最常使用的类就是NSStr ... -
正则表达式测试工具、网页版
2012-07-06 09:45 730有时候为了测试正则表达式、临时自己写了这么一个、我对于JS ... -
Php正则表达式
2012-07-06 09:37 6021、 perl兼容正则表达式: 模式修 ... -
如何修改酷我软件中的皮肤图片为自己的图片?
2012-07-06 09:30 625如何修改酷我中的 ... -
window.opener 的用法
2012-07-05 20:45 622window.open()支持环境: JavaScript ... -
Swing组件集合的事件处理(四)
2012-07-03 13:43 623如果我们正在创建我们自己的组件并且希望这些组件触发事件,我 ... -
Flex 与java 通信,通过BlazeDS
2012-07-02 10:25 5441. Server代码 package com.east ... -
FLEX与javascript交互
2012-07-02 10:25 571用Flex来调用同一页面中的javascript函数。调用 ... -
twaver-flex效率与性能测试
2012-07-02 10:25 609测试环境: 测试一 节点:创建图片节点; 连 ... -
Flex xml的实用操作
2012-07-02 10:25 598XML类包含用于处理XML对象的工作方法和属性。 XML类 ... -
OpenScales入门教程:第二节 : 创建第一张地图
2012-07-01 00:03 621你需要把第一 ... -
flex与twisted通过socket通信
2012-07-01 00:03 615flex端代码 0){ bMsg.writeUTFB ... -
Flex Socket编程
2012-07-01 00:03 623比较懒,比较少上csdn的,如果发现留言给我没有回复,望见 ...
相关推荐
- 为了保证数据的安全性,可以使用SSL/TLS加密Socket通信,Flex支持SecureSocket类实现加密连接。 - 使用线程管理,避免阻塞主线程,提高用户体验。 - 数据压缩和编码优化,减少网络传输的数据量,提高通信效率。...
在本示例中,"flex C# 基于socket 通讯 应用程序源码"描述了一个项目,该项目结合了这两种技术,通过Socket通信实现客户端和服务器端的数据交互。 Socket通信是网络编程的基础,它允许两个网络应用程序之间建立连接...
通过研究这些代码,读者可以更好地理解如何在实际项目中应用Flex和C#的Socket通信。 总的来说,这个教程适合对网络编程有一定基础,希望学习如何构建实时互动网络游戏的开发者。通过学习,开发者可以掌握创建跨平台...
3. **Flex与Socket通信**:在Flex中,使用flash.net.Socket类进行网络通信。需要理解如何设置主机名和端口号,打开连接,以及使用readUTFBytes或readBytes方法读取服务器数据,writeUTF或writeBytes方法写入数据。 ...
- **事件驱动编程**:Socket通信通常是基于事件的,如数据接收、连接建立和关闭等,因此需要理解和使用事件处理模型。 - **错误处理和异常安全**:网络通信可能会遇到各种异常,如连接中断、数据包损坏等,需要妥善...
使用Socket通信**: 另一种实现C#与SWF通信的方法是通过Socket编程。这种方法更加灵活,但实现起来相对复杂。 总之,SWF文件之间的通信、Flex与SWF之间的通信以及C#与SWF之间的通信是实现复杂富互联网应用的重要...
3. 在Flex中使用Socket类建立与C#服务端的连接,并加载策略文件。 4. 实现客户端事件监听,监听Socket的连接状态、接收数据事件。 5. 用户在客户端输入消息并点击发送,通过Socket将消息发送到服务端。 6. 服务端...
5. **Socket通信**: Socket是网络编程的基础,它提供了进程间的通信能力,使得客户端和服务器之间可以交换数据。在网络MORPG中,Socket用于建立连接、发送和接收游戏状态更新、玩家动作等信息,确保游戏的实时性。...
Socket 提供了一种低级别的网络通信机制,允许 Flex 客户端与使用各种编程语言(如 C++, VB, C#, Java)开发的服务器端进行双向通信。 在 Flex 中,ActionScript 3.0 提供了 XMLSocket 类来实现 Socket 连接。...
XMLSocket类是Flex中实现Socket通信的主要类,它提供了基本的套接字功能,包括打开、关闭连接,以及读写数据。 **XMLSocket使用** 1. **创建Socket连接**:首先,你需要创建一个XMLSocket实例,并指定服务器的IP...
Flex+NET实现聊天室功能是将Adobe Flex技术与Microsoft .NET框架相结合,创建一个实时通信的应用程序,使得用户可以通过Web浏览器进行在线聊天。这个过程涉及的技术主要包括Flex前端开发、.NET后端服务以及数据传输...
FluorineFX安装程序,100%好用。 FLEX&FLASH 网络通信必备。
在本项目中,我们主要探讨的是如何利用...此外,由于Flash Player的安全策略,可能还需要处理跨域问题,确保客户端能够正确地与服务器通信。同时,考虑到性能和用户体验,优化图像处理和网络传输过程也是必不可少的。
7. **网络编程**:包括HTTP请求、Socket通信以及本地文件系统的访问,这些都是构建Web应用的重要部分。 8. **错误处理和调试**:讲解如何使用try-catch语句处理运行时错误,以及使用Flash的内置调试器进行问题排查...
同时,Socket和XMLSocket类提供了低级别的网络通信功能,用于创建实时的网络应用程序。 八、错误处理和调试 理解Error类和try...catch语句对于编写健壮的代码至关重要。学会使用ActionScript的内置调试工具,如...
- **Socket和URLLoader**:实现与服务器的双向通信,进行HTTP、HTTPS、FTP等请求。 7. **音频和视频** - **Sound和Video类**:处理音频和视频的播放、暂停、停止等操作。 - **NetStream和NetConnection**:用于...
6. **网络通信**:AS3提供了Socket、URLLoader和XMLSocket等类进行网络通信,可以实现与服务器的数据交换,例如JSON和XML的发送与接收。 7. **错误处理**:通过try...catch语句进行错误处理,提高程序的健壮性。AS3...
7. **网络通信**:包括加载外部数据(XML、JSON、图像等)、使用Socket或URLLoader进行HTTP请求,以及WebSocket通信。 8. **错误处理**:讲解如何捕获和处理运行时错误,以及异常处理机制。 9. **音频和视频处理**...