这篇文章中,我们使用AIR2.0中提供的新API -- SeverSocket来构建一个你自己的聊天程序。
这个聊天程序由两部分组成,一个是客户端,一个是服务端。
准备工作
在开始之前,我们首先要做一些准备工作。请确保你有以下环境:
1,Flashbuilder beta2安装
首先在这里 现在Flashbuilder 。建议用迅雷下载。这里给出的链接是独立安装版的,如果你已经有eclipse并且喜欢插件版,也可以自己下载插件版安装。
2,AIR2.0B1的SDK
在这里 下载SDK.
3,配置FlashBuilder让它能正常使用AIR2.0的SDK。这里大家如果不知道如何做,可以参考AIR2.0入门教程[一]:新特性介绍以及开发环境的配置 。
Socket 以及ServerSocket的编程接口介绍
我们在前面的文章里面已经对Socket的概念和ServerSocket进行了介绍,这里对应Socket以及ServerSocket再来介绍一下这些概念对应到编程接口中表现为什么。
ServerSocket
在这里,一个ServerSocket的作用实际上就是注册到一个特定的IP地址和端口上等待连接。一旦客户端通过这个IP地址找到了这个服务端。 一个TCP/IP连接就被建立起来。一旦连接被建立起来后,ServerSocket的使命就基本上完成了一大部分。他在以后服务端和客户端的交换中不起 太多的作用。
总结其作用,他有两个主要作用:
1,通过指定一个特定的IP地址和端口号,监听网络请求。
server.bind(address,port)
server.listen();
2,把网络请求以ServerSocketConnectEvent 的事件通知给编程人员,以方便下一步对这个网络请求的处理。
Socket
Socket是用来封装数据交换过程中的操作而出现的一个概念。当客户端希望连接到一个服务端的时候,他首先需要通过Socket来指明他希望连接 到的服务端的地址以及端口号。一旦服务端相应这个请求,这个socket就成为一个代表客户端到服务器端连接的对象。所有对服务器的数据交换操作都在 Socket对象上发生。一个需要注意的概念是,在服务端,当一个连接被建立起来后,服务端也会创建一个Socket对象用来保存他对客户端的连接以及用 于处理之后发生的数据交换。ServerSocket则不负责任和数据交换的工作。
Socket的主要作用则是:
1,通过指定一个特定的IP地址和端口号,发起一个针对服务器的请求
2,服务器接受请求后,通过write*方法讲客户端的数据写入发送流,并且发送到通信的另一方。
3,通过ProgressEvent.SOCKET_DATA事件来通知编程人员对方数据到达,以进行下一步处理。
这里,我需要再次强调一遍,Socket是服务端和客户端通信都需要的对象,服务端一旦建立起和客户端的连接后,会产生一个新的Socket对象供编程人员来操作这个连接,ServerSocket则不会参与后期的数据交换,它的作用仅仅在于创建连接。
例程功能描述
这个聊天程序所实现的是:一个服务端以及一个客户端组成这个程序。服务端启动后监听一个端口,由客户端连接。一点连接成功,就可以开始聊天应用了。
如果你有兴趣,可以对这个项目进行改进。比如加入服务器的房间管理,以及客户端的私聊等。由于现在的聊天服务已经非常普遍而且都非常成熟,这个聊天程序没有太大的实际用途。我们只是在这里通过介绍这个聊天程序来向大家介绍AIR的ServerSocket的基本使用原理。
构建程序
首先,我们先来看看服务器端的界面:
这个界面中,我们有一个IP地址选择框用来选择你想监听网卡上的哪个IP地址。对于这里不明白的,请参考上一篇 文章中的关于绑定地址的概念。同时,有一个端口选择框,让你选择你想监听的端口。
客户端界面
这里是客户端界面,这个界面中,我们看到我们可以选择连接到哪个服务器,这里的服务器地址,就是运行服务端的电脑的IP地址,我目前填写了 Localhost因为大家在测试的时候,一般都是在同一台机器上连接服务端的。同时,这里也有一个端口选择输入,用于输入你想要使用的网络端口。
看到这里,我建议大家下载编译好的程序到本地,运行一下,这样可以更好理解程序的逻辑。点击这里 下载编译好的AIR文件。(需要登录才能下载)
程序结构
在这个程序中,我们有两个可以直接运行的文件,分别是:
SocketClient.mxml 这个是客户端
SocketServerExample.mxml则是服务端
这里,我着重介绍一下com.riameeting.air20b1_example这个包下面的几个类的做用
- Client是封装客户端代码的一个类,其作用是接受Socket消息,并且触发消息事件。另外,当发送消息的时候,也是通过这个类实现的。
- MessageEvent则是一个封装的事件,用来传递消息
- NWinterface是一个用来获取本机网络接口的类。它可以告诉你本机有几个网卡,每个网卡的IP地址是什么
- Server则是一个封装了服务端监听的类。他其实是一个ServerSocket的子类。
点这里 程序的源代码下载。