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

关于flash.net.Socket的例子

    博客分类:
  • Flex
阅读更多
前两天看到http://www.ifbin.com/ 的所有代码开源了。于是迫不及待的下载下来看了一下。顺便推荐一下,这些代码的确都比较不错的。

忽然看到了以前见过的那个使用 flash.net.Socket 包制作的pop3邮件接受的一个例子。当时没有代码,所以只是看了一下。
现在有了代码,于是就看了一下代码。

转入正题:我这篇文章就是把ifbin里面的那个使用flash.net.Socket 作的pop3的例子拿出来,结合一些网络基本知识介绍一下。希望能够起到抛砖引玉的作用。
同时,也探讨一下flash.net.Socket这个包真正的使用意义

首先,我觉得要照顾一下对socket连接不太明白的人:) 简单介绍一下这个概念。如果你清楚这个概念或者觉得这些东西没用,可以直接跳到后面去。
互联网的实现是分为很多层的,可能有些人很清楚7层结构。这里不作深入讨论。但是,我要说一下,大致我们可以把互联网的实现分为3大块:

1,与物理层关系很密切的一层。这层包含多种不同的协议,比如,你在家拨号上网时,物理层协议和你通过以太网上网时的协议是不一样的。但是这对我们不重要。
2,Tcp/IP, 这个层次实际上是几乎整个互联网都用到的而且都在使用的一层。我们的远程网络寻址就是通过这个层次实现的。
3, 应用协议层 这里面是包含了所有我们的网络应用所使用的协议,它是建立在tcp/ip层之上的。比如http(web协议),smtp(邮件发送),pop3(邮件接受)。

我们平时使用flash的时候,可能用过loadMovie,或则loadVar,这些都可以从外部加载内容进入到flash里面。但是,这个过程是通过http协议来完成的。
而我们要讨论的socket实际上是直接建立在刚才讨论过的第二部分。也就是tcp/IP之上。这就要求我们自己需要实现一些应用协议。这里的这个例子就是实现pop3协议的。


好,实际上,说道协议,可能有些人比较陌生,觉得平时没有接触过,没有感性认识。其实,各种建立在tcp/ip层上的协议大多数不是那么深奥。

由于我们这次要对pop3协议进行操作。我就举个例子说明一下pop3协议.
我们打开一个命令行窗口
键入如下:

telnet pop.163.com 110

这个命令就是要求连接到pop.163.com 的110端口去。

我们的flash程序也需要连接到这个端口去收信的
如果你的网络连接正常,并且你也正确键入了上面那行。你应该可以看到一个纯黑的窗口
在下面的操作就是在同pop服务器的交互了。注意,在telnet下,你不能用退格键,如果打错了,直接回车,重新输入一遍。


现在输入

user yourUserName
这里是 user 命令,语法是
user 空格 你的用户名

然后输入

pass yourpassword
这里是 pass 命令,语法是
pass 空格 你的密码

这样你就登录了


然后,用list命令来获取你的信

list
这个命令是用来获取邮件列表的



然后,你可以用
retr 邮件号

retr 408


来获取邮件内容
只不过是以2进制获取到的。还有很多email的标记。

但是,到此为止,你已经可以获取到邮件内容了
写了这么多,还没进入正题呢。真是的:L
不过,为了没有网络基础的人能看明白点,我就这么写吧。



今天继续写

那么,下面就该进入正题了。再不进入正题也说不过去了

首先,先把
flash.net.Socket;
flash.utils.ByteArray;
这两个类说一下

Socket这个类是Flash9新支持的。它的作用就是创建一个建立在TCP/IP协议上的socket连接。
什么叫做socket连接呢。一般来说,你要想指定远程计算机上的一个服务,不仅要说明ip地址,还得指名端口号。
ip地址与端口号合起来叫做一个socket,来标示远程计算机上的一个服务。
比如http服务
我们通常看到 12.34.5.6:8080
这样的形势,就是一个套接字,也就是一个socket

所以,你就把socket理解为标示远程服务的ip与端口的组合

在网络上传送的内容都是使用二进制来传送的,
他们实际上属于如下形式中的一种:
Byte,Bytes,Double,Float, Int,Object,Short,UnsignedByte,UnsignedInt,UnsignedShort,UTF,UTFBytes,Boolean

由于pop3协议发送的命令可以用UTFBytes,所以,这里,作者就用了这个类型



大家可以看到在一开始,程序先是

                                创建一个新的socket对象

socket = new Socket();
由于网络调用是异步发生的,因此,像你使用loadVar或者xml.load的时候一样,必须定义一个回叫的方法。
在这里,体现为事件的监听。

socket.addEventListener( "socketData" , socketDataEvent , false ,0);
这里添加了当data返回时的响应事件。

然后,就是就是当你点击connect的时候,这个connect方法了。

                                他这是在取得文本框里的地址
                                // Assign POP3 server from text input

POP3Server = pop3Server.text;
然后,通过调用socket的connect方法连接到那个服务器
                                // Connect to server and specify port number

socket.connect(POP3Server, port);
之后,创建一个ByteArray,这个东西其实就是一个以"位"byte为个体的数组。
                                // Create an instance of flash.utils.ByteArray

var authentication:ByteArray = new ByteArray();
然后,向这个byteArray中写入字符串,也就是我们的命令。这两个命令大家应该比较熟悉了吧。
                                // Write UTF string user and pass to ByteArray and terminate with \r\n

authentication.writeUTFBytes("user " + pop3User.text + "\r\n");
                                authentication.writeUTFBytes("pass " + pop3Password.text + "\r\n");
最后,由socket把这个内容写到缓冲区
                                // Write ByteArray to socket

socket.writeBytes(authentication);
把缓冲的内容发送出去
                                // Flushes any accumulated data in the socket's output buffer and sends it to the server

socket.flush();
剩下的几个方法其实做得是事情都是一样的了。也没什么可说的。

我就先到这里,同时,我也根据这个改写了一个特别简单的ftp的示例。如果你熟悉ftp命令的话,可以拿这个玩一下。

点这里下源码


最后,说一下安全限制

由于flashplayer的安全限制,虽然提供了很强大的socket这个类,但是,对于我们来说,除非你自己做网络游戏或者什么协议,这个东西的通用性并不是很高。
因为你只能连接到自己的服务器,不能够连接到提供服务的那些邮件服务器,ftp服务器等等。

所以,对于我们来说,这个类的实际用途实际上是提高了flash应用程序与服务器交互的灵活性,而并没有给我们提供一个可以连接网络上其他服务的接口。

但是,有一个用途我们是可以利用它的,并且我们也许只能通过这个socket来实现。
那就是 下载某种文档或者内容而不在客户端留下任何缓存。

现在的flash应用程序可能都有一个问题,当需要下载一个保密的文件并且不想让用户在浏览器的缓存中找到它似乎是不可能的。因为不管你用loadVar,loadMovie,XML.load
这些都要在浏览器的缓存中留下这个文件。即使你在http头设置了no cach. 因为是通过浏览器获取的,所以,总会被获取到。

但是,如果你使用socket来获取的话,这个传送只建立与flashplayer与服务器之间,浏览器不参与。因此,可以不留下任何的cach. 
分享到:
评论

相关推荐

    HTML5调用Socket接口例子

    这时可以使用Flash Socket或者Long Polling等技术作为备选方案。同时,安全问题也不容忽视,使用WebSocket时应确保数据传输的安全性,例如使用SSL/TLS加密连接。 总的来说,HTML5的WebSocket接口为构建实时Web应用...

    FLEX与JAVA通过SOCKET通信

    在Flex中,你可以使用`flash.net.Socket`类来创建Socket对象,连接到服务器并发送或接收数据。以下是一个简单的示例: ```actionscript var socket:Socket = new Socket(); socket.addEventListener(Event.CONNECT,...

    java与flash通信.docx

    import flash.net.Socket; import flash.events.Event; var serverIP:String = "localhost"; var serverPort:uint = 10086; var socket:Socket = new Socket(); socket.addEventListener(Event.CONNECT, onConnect...

    用php的socket跟flash的socket通信

    import flash.net.Socket; import flash.net.URLRequest; import flash.utils.ByteArray; public class FlashSocketExample extends Sprite { private var socket:Socket; public function ...

    AS3 实现发邮件

    3. **使用Flash Socket**:AS3提供了`flash.net.Socket`类,可以用来建立TCP连接。通过这个类,我们能够直接与SMTP服务器通信。 4. **构建SMTP命令**:AS3程序需要模拟SMTP对话,发送如"HELO"、"AUTH LOGIN"、"MAIL...

    flash +asp.net Socket 简单聊天室实现

    利用socket开发的简单flash聊天室,后台使用c#开发socket服务器,例子比较简单,只是实现了socket与flash通信,相信大家会有启发。 资源内容: c#源程序和已经发布了的服务器: as3.0 测试源程序,

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

    在AS3.0中,我们可以使用`flash.net.Socket`类来实现Socket通信。这个类提供了打开、关闭、读写数据等方法,使客户端能够与服务器进行双向通信。 以下是一些关于AS3.0 Socket通信的关键知识点: 1. **创建Socket...

    Flex Soket与Java通讯

    在Flex中,`flash.net.Socket` 类是实现Socket通信的核心。这个类提供了打开、关闭、读取和写入Socket连接的方法。例如,你可以使用`Socket.connect()`方法连接到指定的IP地址和端口号,然后使用`Socket....

    Flash转盘AS .net互通

    【标题】"Flash转盘AS .net互通"涉及的核心知识点主要集中在两个方面:一是Flash与.NET服务器之间的数据交互,二是Flash中的动态动画制作。这两部分是构建一个互动性丰富的网络应用的关键。 首先,我们来详细探讨...

    一段C#编写的Socket服务器端程序,与前段AS脚本连接

    1. **创建Socket对象**:在AS3.0中,使用flash.net.Socket类创建Socket对象,并指定服务器的IP地址和端口号。 2. **连接服务器**:调用connect()方法连接到服务器,成功后会触发connect事件。 3. **数据发送与接收**...

    flash连接数据库示例

    import flash.net.XMLSocket; import flash.events.Event; import flash.events.ProgressEvent; var socket:XMLSocket = new XMLSocket(); socket.addEventListener(Event.CONNECT, onConnect); socket....

    Flex_AS3与Java的Socket通信

    如果Socket尚未连接,它会尝试连接到指定的IP地址(在这个例子中是`192.168.2.103`)和端口号(`5678`)。然后,它发送字符串“example\n”到服务器,并通过`flush()`方法确保数据立即发送。`onConnect`和`...

    flash 提交例子

    标题中的“Flash提交例子”指的是使用Adobe Flash技术进行数据提交的一种示例应用。在Web开发的早期阶段,Flash因其丰富的交互性和跨平台性被广泛用于创建动态内容和交互式应用程序,其中包括用户表单的数据提交。 ...

    flash + c# 聊天程序

    在网上找一个flash聊天的例子,不过运行不通,调试好之后,将c#服务端做了改进:把监听端口、接收、发送数据的程序分开来;方便不同项目使用。测试通过登陆和发消息。注意server.cs 46行serverIpAddress = Dns....

    赛尔号发包例子以及逆向过程-易语言

    一般搜索flash.net.Socke即可==send(param1, param2) #4CAF50==发送数据包的函数 public function send(param1:uint, param2:Array) : uint  {  var loc3_:* = null;  var loc4_:* = null;  if(this....

    数据的交互

    这个主题主要关注的是如何在Adobe Flash环境中利用WebServer(如ASP.NET)进行数据交换。Flash以其强大的图形处理能力和丰富的交互性,常被用于创建动态网页内容,而ASP.NET则是一种强大的服务器端编程框架,用于...

    flex前台和后台交互例子

    Flex SDK内置了Flash Remoting模块,可以轻松实现AMF通信。 2. ** BlazeDS与LiveCycle Data Services** Adobe提供了BlazeDS和LiveCycle Data Services这两个中间件,用于在Flex与Java服务器之间建立AMF连接。...

    使用LocalConnection进行swf之间的数据交互(附helloWorldDemo)

    LocalConnection对象是Flash Player和AIR(Adobe Integrated Runtime)内置的类,位于flash.net命名空间下。它提供了无须用户交互就能在SWF之间传递消息的功能,这与传统的HTTP请求或Socket连接不同,...

    先锋无组件上传类(无惧2.0杜绝上传漏洞修改版) v2004

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: ...

    vc++ 开发实例源码包

    FlashPlayer播放器4.0的VC++源代码 如题。 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本...

Global site tag (gtag.js) - Google Analytics