基于QT的网络聊天系统设计

2015-04-30 06:34赵茁琳陈恒如韩利凯
软件导刊 2015年4期
关键词:嵌入式系统

赵茁琳 陈恒如 韩利凯

摘要摘要:根据嵌入式应用特点对嵌入式终端下的网络聊天系统进行设计,实现了实时通信和文档共享,具有数据通讯不需要建立服务器、直接在两台电脑间进行通信和数据传输、支持文件及文件目录传输、安全快捷等特点。

关键词关键词:QT;Linux;嵌入式系统;网络聊天系统

DOIDOI:10.11907/rjdk.1431092

中图分类号:TP319

文献标识码:A文章编号文章编号:16727800(2015)004011402

0引言

QT是诺基亚公司开发的一个跨平台应用程序框架,使用QT编写的软件可以移置到任意操作系统上编译与运行,而不需要修改源代码,软件会自动依据使用平台的不同,而呈现出平台原有的图形界面风格。QT是一个跨平台的C++ GUI应用构架,它提供了丰富多彩的窗口部件集,具有易于扩展、面向对象、基于组件编程等特点。并且,目前Linux上最流行的KDE桌面环境就是建立在QT库的基础上。因此,利用Linux进行基于QT的嵌入式聊天系统设计与开发具有一定的应用价值。

1系统组成架构

系统主要由文字聊天模块和文件传输模块组成。

1.1文字聊天模块

系统采用C/S架构,客户端也同时作为服务器端。系统发送信息给局域网用户时,如图1所示,由单播模块和广播模块来实现,信息接受则由信息接收和信息查看两个模块完成。

1.2文件传输模块

系统传送文件使用TCP协议,端口为2425,如图2所示,文件传输前有个“3次握手”过程,通过“3次握手”从而建立起一个TCP连接,实现文件、文件夹传输,最后关闭套接字连接。

2系统设计

2.1系统用户列表建立

通过使用UDP协议,在系统启动时向255.255.255.255广播地址发送广播包,广播包默认端口是2425,广播包内容包含工作组、用户名、IP地址、主机名等信息。已经启动的用户通过端口2425接收到此广播包后,就会在自己的用户列表中添加该用户的工作组、用户名、IP地址、主机名等信息,同时向对方IP地址发送本机用户的个人信息,从而使双方建立起用户列表。当刷新用户列表时发送的广播包和启动时相似,只是返回的标识信息和启动时略有不同,可以使用Wireshark抓包工具,监控端口2425的数据,就能截获聊天和刷新时的信息[1]

2.2系统聊天信息传送

系统聊天信息传送使用UDP协议,由于UDP协议提供的是无连接服务,所以传输速度快,但是由于没有确认机制,因而提供的是不可靠的服务,需要自己定义返回信息的标志来判断对方是否接收到信息。

使用IPMSG_SENDMSG命令发送消息,消息内容添加在附加信息中。在接收消息时,如果对方要求回信确认,则需发送IPMSG_RECVMSG命令并将对方发送的数据包的编号放在附加信息中一同发送至发送消息方。发送广播消息需要使用IPMSG_BOADCASTOPT标志和IPMSG_SENDMSG命令[2]。

自动发送包(缺席通知)还需要加上IPMSG_AUTORETOPT标志以得到请求-应答保护,如果没有任何一个包应答,则确认自动发送包没有返回。

2.3文件传输

文件传输使用带有IPMSG_FILEATTACHOPT位的IPMSG_SENDMSG命令进行传输,文件属性及内容添加在附加信息中。当接收端开始接收文件时,接收端将请求传输文件命令IPMSG_GETFILEDATA发送到发送端的TCP端口,并将发送端发送的包编号:文件序号:偏移量写到附加信息区一同发送,文件发送端接收到该请求信息后进行校验,如果正确即可向接收端发送文件[3]。

当接收端接收到目录文件时,将发送附加信息区为发送端发送的包进行编号:文件序号:偏移量(全为十六进制格式),用IPMSG_GETDIRFILES命令请求传输目录文件,而发送端则将头信息长度:文件名:文件大小:文件属性:文件内容添加到附加信息区,头信息长度是从头信息长度开始到文件内容前的‘:分割符为止的字符个数。当文件属性为IPMSG_FILE_DIR时,系统能够自动识别其为目录,下一个文件的数据在该目录之后,若文件属性为IPMSG_FILE_RETPARENT,系统识别其动作为返回上一级目录,在这种情况下,文件名为‘.,其属性为当前目录的值[4]。

2.4用户离线

当用户离线时,可以发送一个离线广播包到255.255.255.255,收到此广播包的用户,根据包中的IP地址

(也可能是包含硬件标识,比如网卡地址或者多种判断标

志等)删除对方的用户列表信息。

3系统测试

将两台或者两台以上主机组成一个局域网,运行该系统,在登陆界面中输入用户名和组名,如图3所示,好友列表会显示所有在线用户。双击想要聊天的用户头像,就会打开聊天窗口,在文字输入框内输入文字,点“Send”按钮或者按Ctrl+Enter键就可以给对方发送消息。

4结语

该系统根据嵌入式应用的特点,对嵌入式终端下的网络聊天系统进行了设计,实现了实时通信和文档共享。进行数据通讯时,不需要建立服务器,可直接在两台电脑间实现通信和数据传输,安全且快捷。

参考文献参考文献:

[1]STANLEY B,LIPPMAN BARBARA E. C++ Primer (4rd Editio)[M].李师贤,爱军,梅晓勇,译.北京:人民邮电出版,2010.

[2]SCOTT MEYERS.Effective C++[M].潘爱民,侯捷,译.北京:电子工业出版社,2010.

[3]王和平.Qt从入门到精通[EB/OL ].http://www.fghyu.com.

[4]网络协议解析手记[EB/OL].http://www.wlxysj.com.

责任编辑(责任编辑:孙娟)

猜你喜欢
嵌入式系统
办公自动化系统的设计
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究