王猛,张为,刘艳艳
近年来,随着电子产业技术的蓬勃发展,小型化、智能化、网络化的电子产品成为当今市场的主流,遍布于家用电子、消费电子等各个方面。而伴随着物联网、云计算等新兴概念的提出,电子产品之间的数据交换、网络通信以及产品之间的协同操作势必成为今后的研究热点。
本系统基于统一通信的需求,采用C/S 模式,服务器端运行于PC,客户端运行于Mini6410 ARM 平台,以软件方式实现了多客户端的点对点,点对多点的语音交谈及文件和消息的传输,具有较强的移植性,可以适应有线及无线等多种网络接入方式。
本系统硬件包括PC 机,采用搭载三星公司的S3C6410芯片的Mini6410 ARM 平台;操作系统均采用Linux 系统。系统结构组成。
本系统采用C/S 模式,运行于PC的服务器端,采用Java 语言编写,并设计了可视化界面,方便管理员对系统的常规操作和管理,后台链接MySQL 数据库,保存系统相应执行过程和数据。运行于ARM 平台的客户端采用C 语言编写,同时基于MiniGUI 设计了简单的可视化界面,具有登陆,退出等功能,并且可以实现点对点及点对多点的语音时时交流,及文件和消息传输。系统软件功能示意图,如图1所示:
图1 系统软件功能示意图
现有类似通信系统[1][2]在数据传输方式上只支持客户端和服务器之间的单向通信,或多客户端自身具有独立IP地址的情况。但是,当今嵌入式设备无线接入的情况愈发普遍,相当于每个设备只是此网络中的一个端口,对外网而言,并不具备独立的IP 地址。此时,基于上述数据传输方式的通信系统便不再有效。另外,部分嵌入式处理器的通信系统[3][4]只能实现相对单一的功能,如单独传输语音数据,或单独传输文字信息等。
针对以上情况,本文提出一种基于C/S 模式的通信传输系统,即将客户端要传输的数据通过最初的通信连接发送至服务器,再由服务器将接收到的数据重新打包发给需要接收的客户端。如此可以实现客户端在不具备独立IP 地址的情况下与其他客户端的多种数据交换,同时可基于云计算等技术在服务器端对数据进行相应处理,增加功能,扩展应用;此外采用多线程技术,缓解了服务器转发请求时的运算负担。
MySQL 数据库由于其小巧、开源、功能强大等原因被广泛采用,通过相应的SQL 语句进行增加、删除、修改、查询等操作,可以方便有效的进行系统管理。在本系统中,服务器端后台与MySQL 数据库连接,以JDBC 方式驱动,通过获取数据库中相应表单的值以达到控制客户端间通信及管理整个系统的功能。
在MySQL 中,建立了名为family的数据库,其中创建了如下表单:msgTbl、room、roomCreater、roomState、setAnswer、setAsk、userState;还包含两张动态表msgTbl_Id和userTbl_Id。每张表都由一个主键及其他字段,通过“表关联”可以将多张表关联起来,使数据库中的数据并非各自独立,而是可以方便地表达复杂的数据关系。这些表单分别记录着群组信息,管理者信息,创建者信息,用户信息,响应信息,及系统运行时客户间的索引信息和应答内容信息等。数据库中的动态,如表1所示:
表1 数据库中动态表userTbl_Id
表1 动态记录了登陆到系统某Id 群组的客户信息,包括客户名、客户IP 地址与端口、登陆时间、用户状态、离开的时间。其中,客户状态可以通过“userStateId”字段与表“userState”进行关联获知。此表为系统的应答响应过程及数据传输过程提供了良好的服务,使整个系统传输机制得以正常运行。
系统的语音双工实现流程,如图2所示:
图2 点到点语音传输过程
考虑到语音实时传输对效率要求较高,故在实现语音双工通信时采用无连接的UDP 协议,保证传输的有效性。系统实现了点对点的语音传输及点对多点的语音传输,可以分别用topersonsound 及toallsound 命令请求开启。此处仅以点对点的语音传输为例做具体说明,点对多点语音传输机制相似。
在所有客户端登陆服务器的初始阶段,客户端与服务器的连接信息已经记录在后台的数据库中,不管客户端是否具有独立IP,其与服务器的连接建立是唯一可见的,所以此种通信机制可以适应各种网络拓扑结构。
当客户端发起语音传输请求时,会先向服务器发送语音传输请求,并附有接收者的信息,服务器再将此请求发给指定接收者,若接收者同意请求,则发确认消息经服务器发回给发送端,如此即建立起经过服务器中转的发送端和接收端的语音通信连接。
为不影响其他数据的传输,发送端和接收端都会开启新的线程单独传输语音数据,同时服务器也会在接收到表示传输语音数据的“sound”标识后新建语音处理线程,并新建一个数据接收对象DatagramSocket 绑定到专门用于语音传输的端口上。其客户端及服务器端新建线程的代码如下:
在发送端及接收端进行语音双向传输时,其经服务器转发的语音数据前分别加上“fs_s”和“fs_r”的标识,以令服务器明确数据应向何处转发。而在服务器接收以上数据时循环调用DatagramSocket 对象的receive()方法,将接收到的数据转为字节数组,再在数据前加上“SOUND”标识,再调用DatagramSocket 对象的send()方法转发给指定的客户端,至此,完成了语音的双工通信。
在最后阶段,如需终止语音传输,只需用“OVERSOUND”命令结束此会话,客户端会在发送时加上“OVERSOUND”头标识,服务器端获取到“OVERSOUND”标识即结束此通信过程。
对于点对多点语音传输,只需将“SOUND_S”和“SOUND_R”的头标识换为“SOUND_S_ALL”和“SOUND_R_ALL”,此时通知服务器要将语音数据发至群组所有客户端,并且其中包含了发送者信息。其他机制大体相似。
不同于语音的实时性要求,在Internet 环境下由于丢包及乱序现象普遍,而文件数据要求其完整和可靠性,故在文件传输的时候采用TCP 协议,以点对点的文件传输为例,具体流程,如图3所示:
图3 点到点文件传输过程
在初始连接阶段,客户端与服务器之间建立TCP 连接,并在服务器端单独开辟处理文件传输的新线程,并开辟新端口用以传递客户端之间交换的数据。当双方确定开始传输文件后,发送端首先将文件名信息及接收者信息发送给服务器,服务器再依据此信息将文件名传给指定接收者,之后发送端以固定长度的文件帧(此处设为1024 字节)发送给服务器再由服务器转发,接收者则循环接收文件内容。当文件传输最后数据不足设定的每次传输的文件帧长度,则只将剩余部分传输,并标识传输大小,接收端依此大小接收,至此文件传输过程结束。
对于点对多点的文件传输,只需在上图发送第一帧的信息中将"NAME_TOPER"换为"NAME_TOALL"即可。
对于字符消息的传输,由于其所需传输数据量小,可以与控制信息及请求命令等共用同一线程,无需如传输语音和文件数据时新建线程,减小资源消耗,其传输过程,如图4所示:
图4 点到点消息传输过程
发送端首先发送接收者信息给服务器端,当服务器端判断接收者存在则返回相应帧消息,否则提示接收者不在,并在发送端屏幕上显示。当发送端接收到正常的相应消息时则发送消息内容给服务器,服务器转发此消息给接收端,接收端解析此消息,并会在屏幕上打印出消息发送者昵称及其发送内容。
该系统的服务器端运行于装有Redhat Linux 操作系统的PC 机,后台连接MySQL 数据库,两个客户端均分别运行于Mini6410 ARM11 开发平台。将在PC 机上开发好的客户端程序进行交叉编译,生成可执行文件,再通过串口的方式下载到两个开发板上。其中一个客户端通过路由接入Internet 网,另一个客户端直接接入Internet 网,服务器端自身为独立IP 地址,以此模拟复杂网络拓扑情况。系统开启后,如图5所示:
图5 服务器界面及客户端登陆界面
管理员在服务器端开启用户组,等待客户端登陆,,服务器端和客户端分别基于AWT 和MiniGUI 设计了可视化界面,方便与用户交互。之后进行语音数据传输,如图6所示:
图6 点对点语音传输截图
此处选中Toperson 选项,进行点对点语音传输,若当选中ToAll 选项,则可以与用户组中其他所有客户端进行语音通信。而在进行文件传输时,如图7所示:
图7 点对点文件传输截图
首先选中Toperson 选项,输入要发送的客户端,然后点击Openfile 按钮选择要发送的文件,之后即进行发送。而图8 显示:
图8 字符消息发送截图
消息发送界面,在''MESSAGE LOG WINDOW"下显示客户端间相互发送的消息,在其下方的文本输入框下可以输入要发送的消息,选择要发送的客户端进行发送。
语音传输测试表明,可实现双工通话,话音清晰,通话延迟小于3秒。分别针对音频、视频、图片及文本四种类型文件测试了系统的文件传输功能,测试结果,如表2所示:
表2 各测试文件传输速度比较
上测试结果表明,在Internet 网络环境下,本系统的文件传输过程克服了丢包及时延的影响,文件接收完整,传输速率达到80k/s。
在消息传输的测试中,系统响应快速,消息的发送端及消息内容等信息均正常显示在屏幕上,无丢包乱序的情况出现。
本系统解决了在不同网络拓扑环境下基于嵌入式设备的网络通信问题,其特点为低成本、易移植,应用广,可广泛应用于消费电子及新型的物联网领域。当然,因为数据需要经过服务器转发,本系统对于处于同一局域网之间的嵌入式设备而言,效率较低。可通过加入判断条件,令处于同一网段的嵌入式设备之间进行直接通信以提高效率,进一步拓展应用范围,此为另一研究课题。
[1]武晓燕,张为,邓小勇.基于ARM9的嵌入式语音与数据通信系统[J].微型电脑应用,2011.27(10):23-26
[2]吴骏,肖志涛.基于 S3C2410 A的嵌入式网络通信系统设计与实现.[j]计算机应用研究,2008.25(6):1897-1990
[3]周安栋,张伽伟,石鸿萍.ARM11 嵌入式系统实时网络通信和LCD 显示的实现.[j]现代电子技术,2011.34(16):7-9
[4]董建勋,李锦明,李 鹏,张文栋.一种融合嵌入式Linux和GPRS的手机通信系统,[j]2011.19(11):2804-2806
[5]孙琼.嵌入式Linux 应用程序开发详解[M].北京:人民邮电出版社,2006.
[6]Mini6410 用户手册[k],2010