基于Linux聊天系统的设计与实现
2017-12-21王维陈伟聂维
王维++陈伟++聂维
摘要:本文基于Linux系统,使用socket技术和TCP协议编程实现了聊天系统。该系统由服务器与客户端组成,数据库选用MySQL,其中服务器使用Linux的C语言编写,客户端使用Linux的QT编写。该系统可以支持多用户在线聊天,能够实现截图、文件发送等复杂功能。
关键词:Linux;TCP;socket;聊天系统
中图分类号:TP316.81 文献标识码:A 文章编号:1007-9416(2017)10-0154-02
近几年随着信息的高速发展,人们越来越倾向于借助网络通过聊天工具进行交流。当前聊天系统的开发技术越来越成熟,大多数聊天系统使用的协议是TCP/IP协议和UDP/IP协议[1],并且大多基于Windows平台。本文主要研究基于Linux操作系统的socket通信技术的聊天系统。
1 聊天系统的设计与实现
本系统采用C/S架構,使用ububtu14.04 操作系统,基于TCP协议[2],使用MySQL14.14数据库存储用户的相关信息、聊天记录等。其中客户端主要完成用户的登录、注册、信息管理、聊天等功能,使用跨平台的C++图形用户界面应用程序框架QT实现[3];服务器端主要完成服务器端的初始化及监听、消息的存储和转发、系统消息的发送和信息管理等功能,使用Linux下的C语言实现[4],其总体功能模块图如图1所示。以下部分对部分模块的实现进行介绍。
1.1 截图模块
该模块实现截图区域任意大小的选择,同时调整选择区域及对选定区域的重选及保存,具体算法如:(1)调用updateMoveControlMouseShape(controlValue)函数改变8个控制点的鼠标状态,以顺时针方向编号完成坐标的初始化并显示。(2)选取区域的高度和宽度,调用QPixmap::grabWindow()抓取当前屏幕图片,将当前状态beginControl设置为finishControl,确定选定区域后发送finishPixmap信号。
1.2 文件发送模块
文件发送借助Linux文件系统相关的系统调用实现。文件发送分为发送方和接收方。首先介绍发送方:(1)检测发送方是否在线,并返回提示信息。(2)使用open()函数打开文件,同时设置打开方式为只读。(3)设定每次只发送1K(1024字节)大小的文件,先发送文件头,再发送文件体,同时增加延时处理避免粘包,同时提示用户文件是否发送成功。
接收方:(1)如果接收文件头,以“wb”方式创建文件;如果接收文件体,以“ab”方式打开文件;(2)使用函数write((char *)msg->body,1,rc-4,fp),将接收的文件写入已经打开的文件,使用函数flush(fp)刷新缓冲区;(3)检测是否接收成功:即接收的总字节数与被打开的文件字节数是否相等。
2 测试
经过测试,该聊天系统能够正常运行,其中局部截图、文件发送分别如图2、图3所示。
3 结语
本文基于Linux操作系统,使用TCP的socket编程实现了聊天系统。该系统使用QT开发了客户端,使用C语言开发了服务器端,同时使用MySQL数据库存储用户的相关信息,极大的方便了用户之间的交流。在下一步的工作中,我们将尝试将该聊天系统移植到ARM平台。
参考文献
[1]曾宏安,冯利美.嵌入式应用程序设计综合教程[M].北京:人民邮电出版社,2014.
[2]李淑梅,王志彬.Socket在局域网聊天系统中的应用[J].吉林师范大学学报:自然科学版,2014,(1):71-73.
[3]陈爽.Linux与Qt程序设计[M].北京:清华大学出版社,2011.
[4]贾明,严世贤.Linux下的C编程[M].北京:人民邮电出版社,2001.endprint