网络终端的实时和非实时通信软件设计
2010-06-25何花王平
何花,王平
(福建师范大学 物理与光电信息科技学院,福州 350008)
引 言
目前,嵌入式网络应用技术是国际热点应用技术。Philips、Samsung等公司都在研发相应的嵌入式网络终端,目的是使各类设备直接接入Internet网,实现远程通信与控制。
基于单片机的嵌入式网络终端的硬件组成方案有“单片机+硬件协议栈+网卡芯片”模式和“单片机+网卡芯片”模式。因其软、硬件资源有限,只能实现简单、低速的通信。本设计采用的“ARM+网卡芯片”模式,其特点是自带操作系统,芯片中集成了大部分的外围电路,运行速度快、功能强大[1],为实现互联网的应用提供了有利的硬件平台。
电子邮件和聊天软件是用户进行非实时交流和实时交流信息的两种重要方式。但目前运行在PC机上的此类软件除具备基本通信能力外,还有许多复杂功能,难以运行在嵌入式网络终端这种资源有限的设备上。另外,许多类库中的函数(如System.Net.Mail和System.Web.Mail等)在PC机上可以正常运行,但Windows CE嵌入式操作系统却不支持。因此,不能直接对现有的电子邮件系统和聊天软件进行简单的裁减。针对上述问题,本文设计了基于嵌入式网络终端的聊天软件和邮件客户端软件,具有较高的实用价值。
1 网络终端简介
1.1 硬件组成
本设计采用Samsung公司的S3C2440A-40微处理器,结合电源模块、以太网口模块、串口模块、显示(触摸屏)模块、外部数据存储模块,以及系统工作状态指示和接口模块构成嵌入式网络终端。
1.2 嵌入式操作系统
操作系统采用微软公司研发的Windows CE。它是一款功能强大的32位嵌入式实时操作系统,具有多线程、多任务、完全抢占式的特点,是专为各种受到资源严格限制的硬件系统所设计的[2]。Windows CE支持多类硬件外围设备,内置的标准通信能力使其能够访问Internet并收发E-mail或浏览Web。除此之外,Windows CE特有的与Windows类似的用户界面使最终用户易于使用[3]。聊天软件和邮件客户端软件皆采用C/S开发模式,在VS.C#的智能设备Windows CE开发环境中编辑完成。
2 聊天软件设计
2.1 Socket套接字
TCP/IP协议的Socket提供了原始式、流式、数据报式3种套接字。其中,原始式套接字主要用于检测新协议的实现,或访问现有服务中配置的新设备;流式套接字提供面向连接、可靠的数据传输服务;而数据报式套接字则提供不可靠、面向无连接的服务。
2.2 面向连接的TCP通信过程
采用流式套接字编程时,用户在传输、接收数据之前必须先建立连接,然后才能从数据流中读出数据。其通信过程分为3个步骤:
①服务器监听。服务器被创建并启动后,在指定端口进行监听,等待客户端的连接,实时监控网络状态。
②客户端请求。用Socket创建一个客户端流式套接字,并向指定的服务器发送连接请求。客户端的套接字必须描述出它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后向服务器端套接字提出连接请求[4]。
TcPClient tcPClient=new TcPClient()
tcPClient.Connect(IPAddress.Parse(server_ip),Int32.Parse(server_Port))//服务器IP地址server_ip,服务器端口server_Port
③连接确认。当服务器检测到有连接请求时,listener.Pending()为ture。服务进程被唤醒,生成一个新的字节流套接字Socket socket=listener.AcceptSocket(),与客户的套接字建立连接。之前的套接字继续用于监听网络上的服务请求。
2.3 聊天软件系统设计
两款软件的编程皆采用流式套接字。聊天软件的服务器和客户端处于同一界面。聊天协议常用命令有:JOIN 、GETLIST 、TALK 、SECRET 、EXIT 、OFF 。软件运行时,先启动服务器监听,服务器负责管理客户端的连接并给客户端发送信息,同时支持多个客户端同时连接。客户端登录后可在好友列表中选择好友,进行聊天。
2.3.1 服务器端实现
服务器端程序流程如图1所示。采用TcpListener类创建一个Socket套接字 TcpListener listener=new Tcp Listener(localaddr_ip,po rt),并启动服务器listener.Start()。在没有连接请求时,服务器进程处于休眠状态。为了能够实现多用户同时通信,定义clients为Hashtable对象,同时为每个用户建立了一个独立的数据接收线程,对接收到的数据和命令进行处理 Thread clientService=new Thread(new ThreadStart(client.ServiceClient))。
2.3.2 客户端实现
采用TcPClient类创建一个流式套接字TcPClient作为客户端,用户通过点击好友列表中的好友向 tcPClient类的Connect方法提供所要连接的服务器的IP地址和端口号。若好友没有在线(即好友的服务器没有打开),或者没有检测到连接请求,则Stream.Read()反馈无法通信。连接成功后,将要发送的命令或数据通过By te[]bytes=System.Text.Encoding.Default.GetBytes();Stream.Write(by tes,0,bytes.Length)写入网络数据流。
文件的发送和接收单独采用一对流式套接字完成,即有独立的服务器和客户端套接字。传送文件时,利用FileGetStream()提取文件流:
文件接收主要流程如下:
3 电子邮件客户端设计
3.1 SMTP、POP3协义
SMTP(Simple Mail Transfer Protoco1,简单邮件传输协议)规定由源地址到目的地址传送邮件的规则[5]。其命令由ASCII字母表组成,提供8位的字节传送通道,最高位被填充为0,剩下的7位正确传送,且以<CRLF>作为结束符。
图1 服务器程序流程
邮局协议POP3通信过程包括3个阶段:验证状态、事务状态和更新状态[6]。常用的命令有 DELE(删除邮件)、RETR+邮件号(阅读邮件)、TOP(读取指定邮件的信头和指定的信头行数)等。
3.2 系统设计
客户端软件主要采用多用途互联网邮件扩展编码(MIME)标准,解决了RFC822标准只能发送基本的ASCII码文本信息,难以实现语音、图像等多媒体数据以及其他二进制数据文件发送的问题。MIME常用的编码有Base64、Quoted-printable、7bit、8bit、Binary 等几种,其中 7bit是缺省的编码方式[7]。客户端软件功能模块如图2所示。
图2 客户端软件功能模块
3.3 邮件发送的实现
邮件的发送主要包括以下函数:将字符串编码为Base64字符串的编码函数Base64Encode(),发送单个命令函数SendCommand(),接收SMTP服务器响应码函数 ReceiveData(),读取附件文件流函数Get-Stream(),以及综合上述函数的邮件发送函数SendEmai()。
若发送的邮件不包含附件,则直接发送邮件体。若包含附件,则需要将邮件体分成若干个段:首先定义标志邮件头域中说明邮件内容类型的域Content-Type为multipart/mixed;然后定义其boundary的属性值,后面每段的分段标志就是boundary的属性值,附件可以是语音、图像等。
邮件发送程序流程如图3所示。每条命令发送后都有判断响应码是否正确,如果不正确,则放弃发送邮件内容,并提示用户释放资源。
3.4 邮件接收的实现
结合POP3协议的命令、Socket套接字和Network-Stream网络数据流,可以很快地获取邮件源代码。如何从源代码中提取有用的信息并转换成人们能够理解的文字,是邮件接收程序的难点。本邮件接收系统主要依靠邮件接收类(WincePOPClient.CS)、解码类(QUOTEDPRINTABLE)、解码类(BASE64)和附件保存类(SaveFileAttachment)实现。
邮件接收类(WincePOPClient.CS)包含POP3协议的各种命令、邮件源代码的分段、有用代码的提取,结合QUOTED-PRINTABLE解码类、Base64解码类等进行解码。当正在查看的邮件含附件时,则调用SaveFileAttachment类提取附件。SaveFileAttachment类主要通过正切表达式提取附件的内容,经解码后由SaveFileDialog保存。
接收邮件程序流程如图4所示。
图3 邮件发送程序流程
图4 接收邮件程序流程
4 软件系统调试
嵌入式网络终端聊天软件功能测试如图5所示。嵌入式网络终端邮件收发过程测试如图6所示。当所读取的邮件内包含附件时,读完邮件并按“确定”键后,会弹出“保存文件”对话框,可选择是否保存附件。
图5 聊天软件测试
图6 聊天软件测试
结 语
本文在“ARM+网卡芯片”模式的硬件平台实现了与网络资源的对接,开发出基于Windows CE嵌入式操作系统的聊天软件和电子邮件客户端系统。这两款软件完全可以满足嵌入式系统对硬件的要求,同时也较好地满足了现实社会对交互性、分布性和异地办公的需求,使人们可以在此网络终端上进行实时和非实时通信。在此基础上,还可继续开发VoIP语音通信和 Telnet数据通信,具有良好的市场前景。
[1]王平,等.基于PSTN与Interent的嵌入式终端远程控制方案[J].微计算机应用,2009(1):64-51.
[2]吴弋旻,葛海江,张能贵.基于WinCE的模拟键盘驱动程序的实现[J].机电工程,2008,25(9):103-105.
[3]林建民.嵌入式操作系统技术发展趋势[J].计算机工程,2001,27(10):1-4.
[4]李巧玲.基于C#-Socket的网络通信程序设计[J].福建电脑,2009(4):135-136.
[5]周彩兰,虞珊.基于SM TP协议解析的垃圾邮件防止技术[J].计算机技术与发展,2008,18(1):188-191.
[6]叶树华,高志红.网络编程实用教程[M].北京:人民邮电出版社,2006:328-330.
[7]孙涛.MIME邮件格式分析及信息提取[J].计算机与信息技术,2007,(6):24-30.