- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux环境下即时通信软件设计和实现
Linux环境下即时通信软件设计和实现
作者简介作者简介:李伊林(1984-),男,江西省水利科学研究院助理工程师,研究方向为网络通信;傅小英(1987-),女,南昌大学信息工程学院硕士研究生,研究方向为计算机应用。1QT简介
QT是一个跨平台的C++图形用户界面库,由挪威TrollTech公司于1995年底出品。QT的对象间通信采用信号/槽(Signal/Slot)机制,其中Signal犹如MFC中的事件,而Slot则是响应事件的方法。如果要实现对象间的通信,只需要把一个对象的Slot和另一个对象的Signal连接起来即可实现事件驱动[1]。
由于本系统是通过QT[2]图形开发工具来实现与用户之间的接口设计,所以在Eclipse中如果要使用QT,则需添加QT插件方可建立QT GUI工程文件。
2系统总体设计
本系统实现了Linux系统下的简单通信,同时可以动态刷新在线用户列表,并与其他用户进行聊天通信或传送文件等[3]。如果用户想与其中某位好友聊天,则应该与其建立连接,此时两个客户端有一个作为服务器,另一个作为客户端。本系统的主要架构如图1所示。
系统主要分为客户端和服务器,服务器并不对用户发过来的信息进行转发操作,因为该做法会增加服务器的工作量。它只负责监听客户端的连接请求,同时,在与客户端建立新连接时,服务端会对客户端的端口号进行注册,之后将端口信息提供给每个连接上的客户端[4]。因而两个客户端之间的通信则不需要以服务器作为转发站,而是可以直接进行通信,从而减少了用户之间的通信响应时间。客户端主要可以进行注册、查找密码、添加/删除好友等一些基本操作[5],与好友建立连接之后,还可与好友进行聊天,互传文件等。
图1系统架构
3关键技术实现
3.1客户端Listfriend类实现
Listfriend类主要用来显示当前用户的好友列表,并按好友的不同组号将其进行分类。同时,用户可以通过触发右键事件对自己的好友列表进行修改,如添加、删除、移动好友,修改好友备注,修改用户信息等。在该类中,用户还要对自己的端口号进行监听,如果有好友提出聊天请求,用户可以根据自己的意愿接受或拒绝。或者用户自己向好友提出聊天请求,如果好友拒绝,则关闭对话框[6]。
Listfriend类的主要实现方法如下:
Listfriend::Listfriend(QWidget *parent,User *a_user):QDialog(parent)
{// 右键菜单设置
familyitem = new QAction(tr(移动到家人),this);
connect(familyitem,SIGNAL(triggered()),this,SLOT(moveFamilyGrpSlot()));
………………………………………………………………
//右键二级菜单
grp1 = new QActionGroup(this);
grp1-addAction(frienditem);
grp1-addAction(familyitem);
grp1-addAction(stuitem);
//为listview控件绑定事件(单键事件、双键事件),以及其它控件的事件绑定(下拉列表、查找按钮、查找好友等)
connect(familylistview, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(getFriNum(QListWidgetItem *)));
……………………………
//定时器初始化
time = new QTimer();
connect(time,SIGNAL(timeout()),this,SLOT(updateListSlot())); //刷新列表定时向HOST发送信息
connect(time,SIGNAL(timeout()),this,SLOT(sendMsgToHost())); //定时向HOST发送信息
time-start(10000);//10s
3.2客户端Chatting类实现
Chatting类是用户与好友进行聊天的窗口,用户之间可以发送信息:
Chatting::Chatting(QWidget *parent, QString usernum, QString frinum) : QDialog(parent)
{
//向好友发送连接请求 connect to the client
clientsocket = new QTcpSocket(this)
您可能关注的文档
最近下载
- 荧光光谱仪使用及维护操作手册.docx VIP
- 年福特猛禽F150全车电路图.pdf
- 冶金过程传输现象知到课后答案智慧树章节测试答案2025年春苏州大学.docx VIP
- 潮州市农房设计通用图集.pptx
- 2025至2030中国宠物殡葬服务行业市场深度分析及发展前景与投资战略报告.docx VIP
- 2025四川眉山市国有资本投资运营集团有限公司招聘50人笔试备考试题及答案解析.docx VIP
- 花城版音乐四年级上册-《今夜是否感到恩爱》-课堂教学设计.pdf VIP
- 海康威视监控产品介绍.pptx VIP
- Empower3软件说明书(修订).pdf VIP
- 王受之世界现代的设计史.ppt VIP
原创力文档


文档评论(0)