`
ch_kexin
  • 浏览: 899011 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

AS3 Socket 通信基础(一)

 
阅读更多

我们先来搞清几个概念,这有助于我们更加了解网络通信!
  1、网络中进程之间如何通信?
   首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
   2、什么是Socket?
   上面我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。
   socket一词的起源:在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的,撰写者为Stephen Carr、Steve Crocker和Vint Cerf。根据美国计算机历史博物馆的记载,Croker写道:“命名空间的元素都可称为套接字接口。一个套接字接口构成一个连接的一端,而一个连接可完全由一对套接字接口规定。”计算机历史博物馆补充道:“这比BSD的套接字接口定义早了大约12年。”
   ---------------------------------------------------------------------分割线----------------------------------------------------------------
   好了,下面来讲讲AS3中的Socket编程。
   我们在使用ActionScript3.0进行Socket编程的时候需要关注下面的问题,我们将在今后的学习中逐个对下面的问题进行讨论,并尽量逐渐的改进我们的程序.
   1.与Socket服务器建立连接. 
   2.向Socket服务器发送数据. 
   3.从Socket服务器读数据. 
   4.同Socket服务器进行握手,并确定收到了什么样的数据和如何处理这些数据. 
   5.与Socket服务器断开,或者当服务器想与你断开的时候发消息给你. 
   6.处理使用Sockets时候引发的错误. 

   1.与Socket服务器建立连接. 
   我们通过调用Socket.connect( )或者XMLSocket.connect( )方法并监听网络连接的事件消息.
    连接一台Socket服务器你需要确定两个信息,一个是Socket服务器的域名或者IP地址,另一个是服务器监听的端口号. 
     无论你使用的是Socket还是XMLSocket类的实例,连接请求都是完全的一样的,两个类都是使用一个名叫connect()的方法,该方法有两个参数: 
host : 
     该参数为字符串类型,可以是一个域名,例如"www.example.com",也可以是一个IP地址,例如"192.168.1.101".如果Socket服务器与你该Flash影片发布的Web服务器是同一个,该参数为Null.
port : 
     该参数为一个表示Socket服务器监听端口的int值.该值最小为1024.除非在服务器中有一个policy文件,用于指定允许端口号小于1024. 

     因为Flash Socket编程是一个异步的过程,connect()方法不会等到一个连接完成后再执行下一行代码的执行.如果你想在一个连接完全执行完之前与一个Socket完全绑定,那么你将会得到一个意想不到的结果,并且你当前的代码将不能工作.
     在尝试一个新的Socket连接的时候我们最好先添加一个连接事件监听器.当一个连接建立成功,Socket或者XMLSocket会发出一个连接事件,这就可以让你知道交互已经准备好了.
     下面举了一个Socket实例与本地Socket服务器的2900端口建立连接的例子:

  1. package { 
  2.    import flash.display.Sprite; 
  3.    import flash.events.*; 
  4.    import flash.net.Socket; 
  5.    public class SocketExample extends Sprite { 
  6.      private var socket:Socket; 
  7.      public function SocketExample(   ) { 
  8.        socket = new Socket(   ); 
  9.      
  10.        // Add an event listener to be notified when the connection 
  11.        // is made 
  12.        socket.addEventListener( Event.CONNECT, onConnect ); 
  13.      
  14.        // Connect to the server 
  15.        socket.connect( "localhost", 2900 ); 
  16.      } 
  17.    
  18.      private function onConnect( event:Event ):void { 
  19.        trace( "The socket is now connected..." ); 
  20.      } 
  21.    
  22.    } 
  23. }
复制代码

如果你想通过XMLSocket与服务器建立连接代码也是基本一样的.首先你创建了一个连接事件监听器,然后调用connect()方法.所不同的是Socket实例改为了XMLSocket:

  1. package { 
  2.    import flash.display.Sprite; 
  3.    import flash.events.*; 
  4.    import flash.net.XMLSocket; 
  5.    public class SocketExample extends Sprite { 
  6.      private var socket:XMLSocket; 
  7.      public function SocketExample(   ) { 
  8.        socket = new XMLSocket(   ); 
  9.      
  10.        // Add an event listener to be notified when the connection is made 
  11.        socket.addEventListener( Event.CONNECT, onConnect ); 
  12.      
  13.        // Connect to the server 
  14.        socket.connect( "localhost", 2900 ); 
  15.      } 
  16.    
  17.      private function onConnect( event:Event ):void { 
  18.        trace( "The xml socket is now connected..." ); 
  19.      } 
  20.    
  21.    } 
  22. }
复制代码

如果连接失败,可能是下面两种原因的一种:一种是连接立即失败和运行时错误,另一种是如果无法完成连接从而产生一个ioError或者securityError事件.关于错误事件处理信息的描述,我们打算改日讨论.
     请牢记,当与一个主机建立一个Socket连接时,Flash Player要遵守如下安全沙箱规则. 
     1.Flash的.swf文件和主机必须严格的在同一个域名,只有这样才可以成功建立连接. 
     2.一个从网上发布的.swf文件是不可以访问本地服务器的. 
     3.本地未通过认证的.swf文件是不可以访问任何网络资源的. 
     4.你想跨域访问或者连接低于1024的端口,必须使用一个跨域策略文件. 

     如果尝试连接未认证的域或者低端口服务,这样就违反了安全沙箱策略,同时会产生一个securityError事件.这些情况都可以通过使用一个跨域策略 文件解决.无论是Socket对象还是XMLSocket对象的策略文件,都必须在连接之前通过使用 flash.system.Security.loadPolicyFile()方法载入策略文件.具体如下:
     Security.loadPolicyFile("http://www.rightactionscript.com/crossdomain.xml");
     获得的改策略文件不仅定义了允许的域名,还定义了端口号.如果你不设置端口号,那么Flash Player默认为80端口(HTTP协议默认端口).在<allow-access-from>标签中可以使用逗号隔开设置多个端口号.下 面这个例子就是允许访问80和110端口.

<?xml version="1.0"?> 

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy> 
   <allow-access-from domain="*" to-ports="80,110" /> 
</cross-domain-policy> 

下节给下第二步:向Socket服务器发送数据.

分享到:
评论

相关推荐

    一段as3.0与c++socket通信的例子(as端代码)

    在本示例中,我们关注的是AS3.0如何与C++实现的服务器进行Socket通信。 Socket通信是一种基于TCP/IP协议的通信方式,允许两台计算机之间建立直接的数据传输通道。在AS3.0中,我们可以使用`flash.net.Socket`类来...

    FLASH AS3 SOCKET收发16进制示例

    `HEXtoString as3.as`这个文件可能包含一个函数,用于将16进制字符串转换为ByteArray,以便于Socket通信。 在AS3中,使用Socket类的步骤如下: 1. **创建Socket实例**:首先,你需要创建一个Socket对象,例如`var ...

    java和as3 socket通信 解决安全沙箱问题

    Java和ActionScript 3 (AS3) 的Socket通信在实现跨平台交互时是常见的技术手段,尤其是在处理实时数据传输和游戏开发中。然而,由于AS3运行在Flash Player的沙箱环境中,它受到一系列安全限制,包括不能直接与非同一...

    flash actionscript3 as3通信 教程 socket与服务器通信, 多个swf之间通信.zip

    flash actionscript3 as3通信 教程 socket与服务器通信, 多个swf之间通信.zip

    flash actionscript3游戏开发之as3的socket通信方式介绍即使用XMLSocket.zip

    本文将深入探讨AS3中的Socket通信方式,特别是利用XMLSocket进行网络交互的细节。 首先,XMLSocket是AS3中用于低级网络通信的类,它提供了双向、全双工的数据流,适合于游戏开发中的实时数据交换,如玩家状态同步、...

    flash as3 socket编程基础

    ### Flash AS3 Socket编程基础知识详解 #### 一、引言 在现代互联网应用开发中,实时通信技术变得越来越重要。而Socket编程作为一种实现客户端与服务器之间实时数据交换的有效手段,在Flash开发领域同样占据着重要...

    as3socket通信

    as3socket向服务器传输数据和接收服务器的数据,自己,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...

    socket通信异常解决总结

    Socket 通信异常解决总结 Socket 通信异常是指在网络通信过程中出现的各种错误和异常,包括网络连接断开、服务器端或客户端程序异常、网络链路异常等。这些异常会导致 Socket 连接断开,影响系统的稳定性和可靠性。...

    as3_Socket_的简单实例

    总之,AS3的`Socket`类提供了一种直接与远程服务器进行TCP通信的能力,适合于需要自定义协议或低级别控制网络通信的场景。通过学习和理解TCP/IP协议以及应用层协议如POP3,开发者可以利用`Socket`类构建功能丰富的...

    全AIR 的 Socket通信(air服务端、air客户端)

    Socket通信是网络编程的基础,它提供了两台计算机之间低级别的双向通信通道。 首先,让我们理解Socket的基本概念。Socket是一种网络通信协议,允许两台计算机通过TCP/IP协议进行通信。在AIR中,我们可以使用AS3的...

    as3_socket

    建立Socket连接是任何Socket通信的基础。在AS3中,我们可以使用`Socket`或`XMLSocket`类来创建Socket实例,并调用`connect()`方法来尝试与服务器建立连接。 1. **确定服务器信息**: - **域名/IP地址**:需要知道...

    AS3 Socket 基础知识(很全面) 1

    AS3 Socket基础知识是网络通信的重要组成部分,特别是在网络时代,它被广泛应用于各种应用程序中,因为“一切皆Socket”。网络进程间的通信需要一个唯一标识,TCP/IP协议族通过IP地址识别网络主机,结合传输层的...

    Flex 的socket通信

    这个文件可能是一个AS3脚本,包含了具体的Socket通信逻辑,如创建Socket对象、设置事件监听器等。 通过以上知识点,你可以理解并实现Flex中的Socket通信。实例代码如`ScoketClient.mxml`和`mySocket`可以帮助你更...

    一个可以做AS3的前后端通信脚本

    标题中的“一个可以做AS3的前后端通信脚本”指的是使用ActionScript 3(AS3)语言编写的脚本,这种脚本主要用于处理前端(客户端)与后端(服务器端)之间的通信。在Web开发中,前端通常负责用户交互,而后端则处理...

    (AS3)socket+客户端与服务端+实例

    本文将深入探讨基于ActionScript 3(AS3)的Socket通信,包括客户端与服务端的交互,以及如何通过提供的实例来理解这一过程。我们将不涉及具体代码,而是详细解释相关的概念和技术要点。 首先,Socket是网络编程中...

    AS3使用Socket的简单例子.txt

    - **AS3 Socket编程基础** - **创建与配置XMLSocket对象** - **事件监听器的设置与使用** - **连接服务器及发送数据** - **接收服务器响应** #### 知识点详细解析 ##### AS3 Socket编程基础 ActionScript 3.0 ...

    Flex_AS3与Java的Socket通信

    在本文中,我们将深入探讨Flex AS3与Java的Socket通信技术,这是一种允许Web应用程序(如Flash游戏)与服务器进行低级数据传输的方法。Flex AS3是Adobe开发的ActionScript 3.0编程语言的一个框架,它提供了丰富的...

    as3-java socket

    不过,以上代码给出了AS3与Java进行Socket通信的基础框架。在压缩包文件“as3与java简单socket交互demo”中,你应该能找到一个完整的测试程序,包含AS3客户端和Java服务器端的实现,帮助你更好地理解这一过程。 ...

Global site tag (gtag.js) - Google Analytics