基于Linux平台的通信软件的设计与实现

   0 引 言 

  在互联网高度发达的明天,MSN,QQ等网络谈天软件,使世界各地的彼此联系越来越严密,不论身在哪里,只上网,打开这些软件,就可以和朋友谈天。Linux作为一个开源的驾御零碎,正被越来越多的人意识并应用,它的特点在于驾御零碎源代码的公开化1。然而,基于Linux平台的谈天软件仍然具有驾御不够人性化、交互界面不够雅观等问题。因而,制造一个在Linux 驾御零碎下而且具有
人性化界面的即时通讯工具,将给Linux驾御零碎的用户带来极大的方便。 

  本文基于Linux平台采用Qt编程设计并完成了即时网络通讯零碎,并对该零碎举行ADB在线调试,测试结果证明,设计的发送框和接受框的通讯功能能够顺畅运行。本零碎的设计为前期设计某些相干
通讯零碎供应了部分应用根蒂根基和开发经验。 

  1 Linux平台 

  Linux驾御零碎是Unix驾御零碎的一种克隆零碎,它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并经过全球各地计算机爱好者的共同努力,现已成为明天世界上使用至多的一种Unix类驾御零碎2,而且使用人数还在迅猛增进。 

  在Linux平台上运行的软件都是收费使用的,且可以随意的改动代码部分,只他们是完全基于GNU的便可
。 

  2 零碎设计 

  本零碎设计的基于Linux的谈天软件采用C语言和Qt图形开发软件举行编写,哄骗TCP体式格局举行衔接3?4。通讯服务体式格局全体采用C/S架构。 

  2.1 零碎功能模块分辩 

  (1) 服务器功能模块分辩 

  登岸信息处置模块检查登岸信息能否正确,并向客户端前往登岸信息。若是信息正确,就将服务器端在线用户信息发送给该用户,并在服务器端将该用户在线信息显现进去。 

  谈天信息处置模块给指定的用户发送动静。 

  申请信息处置模块注册新用户,确认后保存该用户信息。 

  发布零碎动静模块卖力将用户登录信息发给每个客户端,并改写用户在服务器端和客户端的形态。 

  全部
服务器功能模块图如图1所示5。 

  (2) 客户端功能模块分辩 

  登岸功能模块衔接服务器并登岸,并前往登岸信息。 

  界面显现模块显现用户挚友及以后形态。 

  谈天功能模块卖力用户间的谈天信息。 

  离线动静模块接受和发送离线动静,并做相应处置。 

  配置信息模块卖力用户基本信息配置。

  2.2 服务器端设计 

  服务器起头运行后即处于监听形态,当监听到有客户端发出衔接乞求时,服务器立刻进入动静处置流程,由于采用并发服务器,所以可同时响应多个乞求。详细流程如图2所示。 

  2.2.1 服务器主变量和函数 

  服务器端用到的主变量和函数以下 

  套接字描绘字int sockfd, client_sockfd 

  套接字地点布局struct sockaddr_in servAddr, cliAddr 

  线程ID符号pthread_t pthd 

  线程调用函数void gif_handle_client(int client_sockfd) 

  发送联系人形态函数 

  void gif_send_clients_contact_list(chat *client_loginid,int client_sockfd, int type) 

  该函数的主作用是当用户的在线形态发生变化时,服务器及时地做出更新,并向该用户的联系人发送该用户形态变更后的信息。 

  获得
零碎时间函数char *gif_get_system_time() 

  该函数读取以后零碎时间并随动静一同发出。 

  2.2.2 服务器动静处置模块的设计与完成 

  服务器的动静处置模块主由7部分组成,分别以下 

  用户登录动静处置模块当服务器接受到用户动静并判别是登录动静后,服务器将依照用户发送过来的用户名和密码到users.db表中举行婚配,若是婚配胜利则把该用户加入到online.db表中,配置用户在线形态为真的,同时调用发送联系人在线列表函数,向增添该用户为挚友的用户发送该用户的上线信息。若是婚配不胜利,服务器将发送登录失败动静给客户端,求用户重新登录。 

  增添挚友信息处置模块当服务器收到用户乞求加挚友的动静时,服务器起首在users.db中查找被增添的用户能否具有,若是该用户具有则把该用户的信息存储到以后用户的挚友文件中,同时在被增添挚友用户的_as.db表中保存以后用户的信息。 

  删除挚友信息处置模块当服务器接受到用户的该动静乞求时,服务器依照用户供应的挚友用户名删除被指定的挚友,同时将用户联系人表举行更新,在被删除的挚友的被增添挚友表_as.db中将以后用户删除。 

  用户谈天信息转发的处置模块当服务器判别用户所乞求的信息为谈天动静后,服务器依照用户所指定的谈天工具到online.db表中查找被指定用户能否在线,若是被指定用户在线则提取他的套接字地点布局,并依照该套接字信息将动静转发。若是用户不在线则将动静符号设定为离线动静,并将该动静写入被指定用户的离线动静文件中。 

  用户下线动静处置模块当服务器判别用户所乞求的信息为下线动静后,服务器将把用户从online.db中删除,配置该用户形态为下线,同时调用发送联系人形态函数,将标志位配置为离线向该用户的联系人发送。 

  离线动静处置模块当服务器判别用户所乞求的信息为读取离线动静后,服务器读用户的离线动静文件,若是该文件中有被符号为新的离线动静时,服务器将把该动静提取进去发送给用户,同时把该动静符号为已读。 

  删除离线动静处置模块若是客户做出了删除离线动静的动作,那末
服务器端将会依照用户的发送信息把该用户的离线动静文件中的离线动静删除。 

  2.3 客户端设计 

  软件的客户端采用图形化用户接口体式格局,Qt图形界面的主特点等于事件触发,当某一窗体动静需被处置时,处置引擎就会依照设计做出处置,图3描绘了客户端的驾御处置流程。 

  客户端运行后,起首登录服务器,若是登岸胜利,服务器将在线的用户信息发送给客户端,目下客户端便可
查看到用户信息。当用户会话时,谈天信息窗体卖力发送和接受用户的谈天信息;用户离线时,该信息通过服务器转发体式格局发送给离线用户,当对方上线时便可查看该离线动静。 

  2.3.1 客户端主窗口设计 

  本文设计的客户端供应图形用户界面,法式运行后,在主窗体上点击相应形态的按钮就会产生一个相应的驾御,包括主窗体,登录窗口,增添用户窗口,零碎动静窗口,离线动静窗口,谈天窗口。 

  主窗体该窗体中包含了所有的用户驾御按钮和挚友列表,用户的驾御都在这个窗体中完成,如图4所示。 

  当用户的驾御胜利或失败时,零碎会显现一条动静给用户,以便提醒用户驾御能否胜利。在相干
的函数内将该窗口的激活属性打开,动静窗口便会自动弹出并显现动静,如图5所示。 

  2.3.2 客户端功能模块的设计 

  用户认证模块主用到的函数为connect(),send(),pthread_create()。当用户启动法式后,起首需用户登岸到服务器能力进一步对软件举行驾御,这一部分即为用户认证模块。 

  界面显现模块当用户胜利登岸后,在联系人列表中将会显现用户的联系人信息,在离线动静窗口中会显现接受到的离线动静,这两个视图均是用列表视图来完成的。 

  动静处置模块当客户端和服务器树立衔接后,客户端会创立一个专门的线程维护客户端和服务器之间的衔接,该线程调用函数依照从服务器接受到的动静范例选择动静处置模块。 

  更新联系人列表信息当判别接受到的动静为GIF_ADDRLIST_MSG时,法式将对联系人视图举行刷新以便及时地显现联系人的以后形态。完成刷新的方法是,先将以前的树移除,而后依照新的联系人形态举行树的绘制。 

  谈天信息当接受服务器发送的动静范例为GIF_CHAT_MSG时,法式起首确定是谁发出的谈天乞求,而后判别谈天窗口能否开启,若是未开启则将开启符号设为真,而后打开谈天窗口。同时配置用户和联系人的显现颜色,以便区分谈天动静的起源。 

  动静乞求胜利或失败信息若是接受到了GIF_SUCCESS_N_ERROR_MSG范例的动静,则法式还会进一步依照另外一个符号符判别是何种零碎动静,并通过零碎动静窗口显现给用户。 

  离线动静若是接受到的动静范例为GIF_OFFLINE_MSG,法式会依照界面显现模块中对树视图的创立步调,创立一个显现离线动静的视图用来显现离线动静。 

  以上几大模块构成了客户端功能处置的主体,大部分驾御和动静处置都是由这些模块完成。 

  3 结 语 

  本文采用Qt编程技术,设计并完成了基于Linux平台的谈天软件功能,详细描绘了零碎服务器端和客户机端的完成进程,并对零碎的事情流程和原理举行了详细论说。服务器经过测试后,能够稳定运行,客户端图形界面后果优秀。本零碎的设计为后续基于Linux平台的软件开发应用供应了参考和借鉴。 

  参考文献 

  1 黄伟敏.基于XMPP协议的Android即时通讯零碎设计J.电子设计工程,2011,19(8)57?59. 

  2 毛红阁,郭红,陈东,等.Android移动通讯序列化协议研讨J.南阳师范学院学报,2012,11(6)47?49. 

  3 攀建.ASP.NET+ADO.NET名目开发实例M.北京清华大学出版社,2004. 

  4 JONES A R.ASP.NET从入门到粗通M.高春蓉,谷宇,阎隽,等译.北京电子工业出版社,2002. 

  5 WORLEY S.ASP.NET技术内情M.王文龙,刘湘宁,译.北京人民邮电出版社,2002. 

  6 吉昂,袁杰,卞春华.Linux平台上的网络测试零碎研讨J.现代电子技术,2010,33(20)110?113.