没有合适的资源?快使用搜索试试~ 我知道了~
AS3 Socket 基础知识(很全面) 1
需积分: 0 1 下载量 139 浏览量
2022-08-08
21:42:34
上传
评论
收藏 28KB DOCX 举报
温馨提示
试读
15页
就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。上面我们已经知道网络中
资源推荐
资源详情
资源评论
AS3 Socket 基础知识(很全面)
在讲 AS3 Socket 之前我们先来搞清几个概念,这有助于我们更加了解网络通信!
1、网络中进程之间如何通信?
首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程 PID 来唯一
标识一个进程,但是在网络中这是行不通的。其实 TCP/IP 协议族已经帮我们解决了这个问题,
网络层的“ip 地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机
中的应用程序(进程)。这样利用三元组(ip 地址,协议,端口)就可以标识网络的进程了,
网络中的进程通信就可以利用这个标志与其它进程进行交互。
使用 TCP/IP 协议的应用程序通常采用应用编程接口:UNIX BSD 的套接字(socket)和 UNIX
System V 的 TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程
序都是采用 socket,而现在又是网络时代,网络中进程通信是无处 不在,这就是我为什么说“一
切皆 socket”。
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 端口建立连接的例子:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.Socket;
public class SocketExample extends Sprite {
private var socket:Socket;
public function SocketExample( ) {
socket = new Socket( );
// Add an event listener to be notified when the connection
// is made
socket.addEventListener( Event.CONNECT, onConnect );
// Connect to the server
socket.connect( "localhost", 2900 );
}
private function onConnect( event:Event ):void {
trace( "The socket is now connected..." );
}
}
}
如果你想通过 XMLSocket 与服务器建立连接代码也是基本一样的.首先你创建了一个连
接事件监听器,然后调用 connect()方法.所不同的是 Socket 实例改为了 XMLSocket:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.XMLSocket;
public class SocketExample extends Sprite {
private var socket:XMLSocket;
public function SocketExample( ) {
socket = new XMLSocket( );
// Add an event listener to be notified when the connection is made
socket.addEventListener( Event.CONNECT, onConnect );
// Connect to the server
socket.connect( "localhost", 2900 );
}
private function onConnect( event:Event ):void {
trace( "The xml socket is now connected..." );
}
}
}
如果连接失败,可能是下面两种原因的一种:一种是连接立即失败和运行时错误,另一
种是如果无法完成连接从而产生一个 ioError 或者 securityError 事件.关于错误事件处理信息
的描述,我们打算改日讨论.
请牢记,当与一个主机建立一个 Socket 连接时,Flash Player 要遵守如下安全沙箱规
则.
剩余14页未读,继续阅读
资源评论
洪蛋蛋
- 粉丝: 21
- 资源: 335
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功