当前位置:首页>> >>


c 局域网聊天软件设计与实现.rar

收藏

资源目录
    文档预览:
    编号:20180913212648245    类型:共享资源    大小:2.34MB    格式:RAR    上传时间:2018-09-13
    尺寸:148x200像素    分辨率:72dpi   颜色:RGB    工具:   
    45
    金币
    关 键 词:
    局域网 聊天 软件设计 实现
    资源描述:
    i局域网聊天软件设计与实现摘 要局域网聊天软件是在 Linux 系统下运行的一个应用程序,程序用 c++语言编写。本程序有如下功能:用户列表自动刷新、通过 TCP 通信协议进行消息收发、MYsql 数据库保存用户名与密码。该设计是一个简单的局域网聊天软件,适用于企业内部和实验室使用,不与互联网进行数据交换,具有高速、安全等优势。本文着重介绍下列内容:对用户上下线消息通知、聊天消息收发等进行数据解析;TCP 网络编程,讲述用 TCP创建 Client 和 Server 以及收发数据的实现;最后对本设计的具体实现方法和设计实现流程进行讲解以及程序运行分析。关键词: Linux;TCP;Socket;Mysql 数据库;C++ iiThe Design And Implementation of The LAN Chat SoftwareAbstractThe LAN chat tool is An application under Linux.The application written by C++ language.This program has the following functions: sending broadcast when login and exit,sending and receiving messages by the TCP communication protocol, using MYsql database to save chat messages. it is most often used to chat in enterprise and laboratory, it is working without data exchange from Internet,so it can transmit data high speed and security. This paper focuses on the following contents: the user online and offline message notification, chat message send and receive data analysis; TCP network programming, here tells the method of using TCP to create client and Server to send and receive data;Finally introduce the design method and implementation process of my graduation design and running the application.Keywords: Linux;TCP/IP;Socket;Mysql database;C++ 目录摘 要 .......................................................................................................................................iAbstract......................................................................................................................................ii1 绪论 ......................................................................................................................................11.1 课题背景 .......................................................................................................................11.2 目的和意义 ...................................................................................................................11.3 研究现状 .......................................................................................................................12 系统分析 ..............................................................................................................................32.1 系统理论基础 ...............................................................................................................32.1.1 C/S 架构 .................................................................................................................32.1.2 TCP ........................................................................................................................32.1.3 Socket.....................................................................................................................42.1.4 QT 编程框架 .........................................................................................................62.2 可行性研究 .................................................................................................................102.3 需求分析 .....................................................................................................................112.4 系统运行环境 .............................................................................................................113 系统设计 ............................................................................................................................123.1 系统结构设计 .............................................................................................................123.2 客户端服务器功能设计 .............................................................................................123.3 客户端设计 .................................................................................................................133.4 服务器端设计 .............................................................................................................143.5 群聊和私聊模块的设计 .............................................................................................164 程序描述与详细描述 ........................................................................................................174.1 服务器端验证客户端的登录信息 .............................................................................174.1.1 功能及实现 ..........................................................................................................174.1.2 技术概要 ..............................................................................................................184.2 服务器端处理用户消息 .............................................................................................204.2.1 功能及实现 ..........................................................................................................204.2.2 技术概要 ..............................................................................................................214.3 客户端读取服务器发送的数据 .................................................................................234.3.1 功能及实现 ..........................................................................................................234.3.2 技术概要 ..............................................................................................................254.4 客户端用户列表的更新 ................................................................................................255 系统实现 ............................................................................................................................275.1 登录模块设计 .............................................................................................................275.2 注册模块设计 .............................................................................................................285.3 群聊模块设计 .............................................................................................................295.4 私聊模块设计 .............................................................................................................32结论 ..........................................................................................................................................34参考文献 ..................................................................................................................................35致谢 ..........................................................................................................................................3601 绪论1.1 课题背景随着信息化的广泛普及,网络这种新兴事物在今年来得到前所未有的普及和发展,基于网络的各种应用层出不穷,让各个年龄及阶层的用户体会到了不同的个性化服务,人们的生活方式已经与网络紧密的结合在一起。中小型企业的领导也认识到提高企业信息化的必要性,为了让企业在发展迅速的信息时代生存下去,增强企业的竞争力,就要求有一个良好的平台来让企业员工之间的交流和通信,特别是领导和员工之间的沟通与交流,因此即时聊天交流系统就应运而生。伴随着企业规模的不断扩大,企业的各种信息也越来越私密,企业只希望员工通过内部网络进行交流与沟通,最大限度避免机密信息通过 Internet 泄漏到外部。为了解决上述问题,从而提出了局域网聊天软件的构想,通过该软件,企业的员工可以随时进行消息传递,即提高了效率,又保护了信息的私密与安全性。软件开发是一个十分复杂的过程,这里对软件开发的基本过程和方法进行介绍,并列举相关的实例加以说明。1.2 目的和意义本论文主要说明基于 Linux 平台的局域网聊天软件的设计与实现。详细阐述开发中所用到的相关技术,并具体分析各个模块的功能和实现方法。本软件能够满足小型企业或小型局域网内部即时通信的需要,提高工作效率。1.3 研究现状1996 年 11 月,出现了 ICQ,于是第一款互联网 IM(Instant Messenger,即时通讯)应运而生,随后短短数年里成为了一个巨大的 IM 产业。到现在,IM 应用工具成为了最热门的网络应用之一。国内各种外聊天工具花样繁多。而作为全球第一款即时通讯工具的 ICQ,经过不断的发展,如今在业内的地位已经无人能够撼动。 ICQ 名字是英文“I seek you”的缩写,即“我找你” 。ICQ 最初只有两个特性,一个是用户列表,另一个是即时聊天。但是一出世就收到网民的喜爱,半年里注册用户就达到了 85 万,1998 年这个数字更是翻了 14 多倍,注册用户达到了 1200 多万人。ICQ 的迅速发展也让在桌面软件领域独步天下的微软与互联网领头羊的 Yahoo 嗅到了商机,分别推出了MSN 与 Yahoo Messenger,形成了即时通讯市场的雏形。ICQ 风行全球的时候,国内也推出了各种仿 ICQ 的中文 IM 工具,现在国内的市场主要有微软的 MSN、腾讯的 QQ、雅虎的雅虎通等等。腾讯的 QQ 占据国内市场的70%以上。随着 IM 应用的发展,其功能也不断的丰富,除了用户列表与即时聊天,表情图片也成为了它的一个重要特性,此外文件传输、视频聊天、游戏等功能也被集成到了 IM应用中。如今,IM 不是一个简单的聊天工具,而是一个集信息资讯、休闲娱乐、交流互动的平台,它上面的语音、音乐点播、视频、信息共享等新的应用层出不穷。随着IM 应用的不断成熟,已经形成了 IM 产业链。IM 应用也成为了现代人们与现代经济中不可缺少的一部分。1互联网技术的发展使信息在传递方面也有了崭新的一面。聊天软件成为了信息传递最重要的方式,它可以让人们随时随地进行信息交流,让人们更好的了解彼此。聊天软件人性化的设计可以让每个用户都能得心应手的使用,获得了更多人的青睐。Internet 的出现让整个世界连通起来,而聊天软件的出现把每一位网上的用户联通起来。网络应用的不断发展,让聊天软件成为最热门的应用之一。经过进来的发展,聊天软件已不再是简单的通讯工具,而是成为集互动交流、休闲娱乐为一体的多元化的互联网应用平台,它的出现给人们彼此间的沟通带来了无比的方便,通过聊天软件人们可以建立深刻的友情,让聊天软件更加充满了活力与生机。22 系统分析2.1 系统理论基础2.1.1 C/S 架构C/S 结构的基本原则是将计算机的应用任务分解成多个子任务,由多台计算机分工合作完成。Client 端完成数据的处理,数据的表示及用户接口功能;Server 端完成DBMS 的核心功能。这种架构的优点是具有强大的事务处理与数据操作能力,开发的模型比较简单,易于人们接受和理解。系统的应用程序和服务器构建在不同的计算机上运行。在 C/S架构中,各个构建能够充分隔离,应用程序的开发集中于数据的浏览与查询,数据库服务器开发集中于数据的管理功能,有利于系统的安全性。服务器与客户端直接相连,实时性良好。可以充分发挥客户端的处理能力,可以在客户端把一部分工作处理后在提交给服务器。客户端的响应速度快并且应用服务器运行数据的负荷也比较轻。缺点一是应用服务器的运行数据负荷较轻。最简单的 C/S 架构的数据应用有两个部分,即客户应用程序与数据库服务器程序,可以分别称作前台程序和后台程序。后台程序运行数据库服务器程序,服务器一旦启动,就随时等待响应前台程序发来的请求;前台程序运行在用户的电脑上,当前台程序要对数据库中的数据进行任何操作时,就自动寻找后台程序,发送请求,后台程序根据预定的规则做出应答。二是数据的存储管理功能比较透明,在数据库中,数据的存储管理,是由服务器与客户端分别进行的,客户端不能违反的规则是在服务器中体现的。对于客户端是透明的,客户端无法干涉背后的过程。在这种架构下,数据库不能成为真正公共的、专业化的仓库,要受到专门的管理。2.1.2 TCPTCP 协议即 TCP 传输控制协议,是一种面向连接的、可靠的传输层协议,是专门为广域网设计的。它的标准是在一系列称为 RFC 的文档中。TCP 是面向连接的,所以通信双方在通信之前必须先建立 TCP 连接,通信结束之后必须断开 TCP 连接。TCP 的可靠性通过下列方式来体现:(1)把应用数据分割成最适合 TCP 发送的数据块。保持应用程序产生的数据长度不变。报文段或段(segment)是由 TCP 传递给 IP 的信息单位。(2)TCP 发出一个段后,都启动一个定时器,等待接受目的端确认收到这个段。如果不能及时收到目的端的确认,TCP 将重发这个段。如果 TCP 收到发送端的数据,将发送一个确认。(3)TCP 保持它首部和数据的检验和。它是一个端到端的检验和,是为了检测数据在传输过程中是否变化。如果接受到的段的检验和有差错,则 TCP 将丢弃这个报文段并不发送确认(希望发端超时并重发) 。(4)TCP 报文段是作为 IP 数据报来传输的,而 IP 数据报可能会失序,因此 TCP 报文段也可能会失序。所以,TCP 将对收到的数据进行重新排序,然后将正确的顺序交3给应用层。(5)IP 数据报会发生重复,所以必须丢弃 TCP 接收端重复的数据。(6)TCP 提供流量控制功能。TCP 连接的双方都有固定大小的缓冲空间。TCP 接收端只允许 TCP 发送端发送 TCP 接收端缓冲区所能接纳的数据。TCP 使用三次握手协议建立连接,下图就是三次握手建立连接的过程。图 2-1 TCP 三次握手示意图首先客户端发送 SYN(SEQ=x)报文给服务器端,并进入 SYN_SEND 状态。其次服务器端收到 SYN 报文后回应一个 SYN(SEQ=y )ACK(ACK=x+1)的报文,并进入 SYN_RECV 状态。最后客户端收到服务器端的 SYN 报文并回应一个ACK(ACK=y+1)报文,然后进入 Established 状态。TCP 经过四次握手终止连接,下图就是四次握手终止连接的过程:图 2-2 TCP 链接释放示意图首先应用进程调用 close 函数,称该端执行“ 主动关闭” (active close)操作。于是该端的 TCP 发送一个 FIN 分节以表示数据发送完毕。接着接收到这个 FIN 的对端执行 “被动关闭”(passive close)操作。一段时间后接收到这个文件结束符的应用进程将调用 close 函数关闭它的套接字,该段的 TCP 也发送一个 FIN。最后接收这个最终 FIN的原发送端 TCP 确认这个 FIN。2.1.3 SocketSocket 接口是 TCP/IP 网络的 API,Socket 接口定义了许多函数或例程 [2],程序员4可以用它们来开发 TCP/IP 网络上的应用程序。要学的 TCP/IP 网络编程,必须理解Socket 接口,Socket(套接字 )是 BSD 提供的网络应用编程接口,现在它已经是网络编程中的标准。据传输等操作都是通过该 Socket 实现的。常用的 Socket 类型有两种:流式Socket (SOCK_STREAM)和数据报式 Socket(SOCK_DGRAM) 。流式是一种面向连接的 Socket,针对于面向连接的 TCP 服务应用;数据 报式 Socket 是一种无连接的Socket,对应于无连接的 UDP 服务应用。Linux 系统中的网络编程通过 Socket 接口实现。Socket 既是一种特殊的 IO,它也是一种文件描述符。一个完整的 Socket 都有一个相关描述{协议,本地地址,本地端口,远程地址,远程端口} ;每一个 Socket 有一个本地的唯一 Socket 号,由操作系统分配。为了建立 Socket,程式能够调用 Socket 函数,该函数返回一个类似于文档描述符的句柄。socket 函数原型为: int socket(int family, int type, int protocol); #include 参数说明:family:协议族 AF_INET,AF_INET6,AF_LOCAL,AF_ROUTE,AF_KEY type:套接字类型 SOCK_STREAM,SOCK_DGRAM,SOCK_RAW ,SOCK_SEQPACKET protocol:协议类别 0,IPPROTO_TCP,IPPROTO_UDP,IPPROTO_SCTP 返回值:套接字 通过 socket 调用返回一个 socket 描述符后,在使用 socket 进行网络传输以前,必须配置该 socket。面向连接的 socket 客户端通过调用 Connect 函数在 socket 数据结构中保存本地和远端信息。无连接 socket 的客户端和服务端连同面向连接 socket 的 bind函数将一个地址绑定到套接字 int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); #include sockfd: socket 套接字描述符 myaddr: 指向特定于协议的地址结构指针 addrlen:该地址结构的长度 返回值:0,成功;其他,失败 struct sockaddr 结构类型是用来保存 socket 信息的:#include struct sockaddr {unsigned short sa_family; /* 地址族, AF_xxx */char sa_data[14]; /* 14 字节的协议地址 */};sa_family 一般为 AF_INET,代表 Internet(TCP/IP)地址族;sa_data 则包含该socket 的 IP 地址和端口号。struct sockaddr_in{ //后面编程也会用到的结构体short int sin_family; /* 地址族 */unsigned short int sin_port; /* 端口号 */5struct in_addr sin_addr; /* IP 地址 */unsigned char sin_zero[8]; /* 填充 0 以保持和 struct sockaddr 同样大小 */}; 使用一个确知的端口来接收客户端的连接。bind 函数将一个地址绑定到套接字 #include int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); sockfd: socket 套接字描述符 myaddr: 指向特定于协议的地址结构指针 addrlen:该地址结构的长度 返回值:0,成功;其他,失败 建立连接与收发数据。 int listen(int sockfd, int backlog); listen 函数可以将套接字由主动修改为被动,操作系统为该套接字设置一个连接队列,来记录所有连接到该套接字的连接 。sockfd: socket 监听套接字描述符 backlog:连接队列的长度 int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);accept 函数从已连接队列中取出一个已经建立的连接 int connect(int sockfd, const struct sockaddr *addr, socklen_t len);connect 主动连接 addr 中的监听套接字。 ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);//发送数据 ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);//接受数据以上是对 socket 编程的一些主要函数进行介绍,接下来的编程中就会用到这些函数。2.1.4 QT 编程框架QT 是一个跨平台的 C++ GUI 应用框架,它给应用程序开发者提供建立友好的图形用户界面所需要的所有功能。QT 具有面向对象、真正的组件编程、易于扩展的特点。QT 的核心机制是信号和槽。信号和槽是 QT 的一种高级接口,主要应用于对象之间的通信。它是 QT 自定义的一种通信机制,独立于标准的 C/C++语言,使用 QT 的信号和槽,就必须借助一个 QT 的工具 moc,moc 是一个 C++预处理器,为高层次的事件处理自动生成附加代码。信号是对象发射出来的,并且只有定义过该信号的类及其派生类才能发射出这个信号。当发射一个信号时,与信号相关联的槽函数将被立刻执行。信号和槽机制独立于任何 GUI 时间循环。只有所有的槽函数返回后发射函数才返回。如果多个槽函数与一个信号相关联,当该信号被发射时,槽函数会一个接一个的执行,但是它们的执行顺序是随机的。不能人为的指定哪个槽函数先执行,哪个槽函数后执行。信号是在头文件中声明的,QT 用 signals 关键字来标识信号声明区。槽函数是普通的 C++成员函数,唯一不同的就是它可以与很多信号相关联。当产生与其相关联的信号时,就会被调用该槽函数。通过调用 QObject 对象的 connect()函数来将信号与槽函数相关联。这个函数的作用是将发射者对象中的信号与接受者的槽函数联系起来。用 QT 的宏 SIGNAL()6来指定信号,用宏 SLOT()来指定槽函数。信号和槽机制虽然比较灵活,但是也有一些局限性。为了避免在实际的使用过程中产生一些错误,做到有的放矢。应注意下面的一些注意事项:(1)和真正的回调函数比起来,信号和槽在效率上有所损失,但是这种损失相对来说是比较小的。它提供的灵活性、简洁性还是值得的。但如果要追求高效率的华,比如实时系统,就要尽可能少用这种机制。(2)信号和槽函数机制和普通的函数的调用一样,要是使用不当的话,在程序运行过程中可能发生死循环。所以,在使用槽函数是一定要注意,防止形成死循环,如在槽函数中发射所接收到的信号。(3)当一个信号与多个槽函数相联系时,当该信号发射后,相应的槽函数的执行顺序将是随机的。(4)在 signal 和 slot 函数的参数中不能使用宏定义。这是由于 moc 工具不扩展#define。(5)不能在 signals 或者 slots 区域内声明构造函数。(6)信号或槽函数的参数不能是函数指针。但是可以通过定义别名来绕过这个限制。(7)信号和槽函数不能有缺省参数。(8)信号和槽函数不能携带带模版类的参数,如果这样使用的话,即时 moc 工具不报告发生错误,也得不到想要的结果。但是,可以通过定义别名来绕过这个限制。(9)信号或槽函数区域内不能包含嵌套的类,嵌套的类中也不能有信号或者槽函数。(10)最后信号或槽函数区域内也不能声明友元。Qt 提供了一组范围相当广泛的 C++类库,并包含了几种命令行和图形界面的工具,有效地使用这些工具可以加速开发过程。Qt Designer:Qt 设计器。用来可视化地设计应用程序界面。Qt Linguist:Qt 语言学家。用来翻译应用程序。以此提供对多种语言的支持。Qmake:使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的Makefile。Qt Assistant:关于 Qt 的帮助文件。类似于 MSDN。可以快速地发现你所需要的帮助。moc:元对象编译器。uic:用户界面编译器。在程序编译时被自动调用,通过 ui_*.h 文件生成应用程序界面。qembed:转换数据,比如,将图片转换为 C++代码。安装的过程对于不同的 Qt 平台是不同的。在 Windows 环境下安装 Qt,需要先安装 MinGW。MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。 在基本层, MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准 C 运行时间库(MSVCRT.DLL), 该库在所有的 NT OS 上有效,在所有的 Windows 95 发行版以上的 Windows OS 有效,使用基本运行时间,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时间扩展。该功能是 Windows32 API 不具备的。下一个组成部分是
    展开阅读全文
    1
      金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:c 局域网聊天软件设计与实现.rar
    链接地址:http://www.gold-doc.com/p-139096.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
    copyright@ 2014-2018 金牌文库网站版权所有
    经营许可证编号:浙ICP备15046084号-3
    收起
    展开