ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:264.77KB ,
资源ID:26201597      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26201597.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(文件传输与聊天系统设计论文学位论文.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

文件传输与聊天系统设计论文学位论文.docx

1、文件传输与聊天系统设计论文学位论文1 前言1.1 文件传输与聊天系统的开发背景及选题意义互联网的普及和发展为人们的沟通提供了多种手段,近年来流行的即时通信是继电子邮件之后的又一种主流通信方式。以色列Mirablils公司1996年11月推出了世界上第一个即时通信软件,即后来风靡全球的网络寻呼机ICQ,宣告了即时通信这一概念的诞生。即时通信系统利用服务器上的用户注册信息和联机用户建立起虚拟社区,服务器为社区成员提供状态信息和联系方式,以便用户之间互相通信,用户使用特定的即时通信客户端登录到服务器,找到他想联系的人进行交流。在ICQ取得巨大成功之后,许多公司纷纷效仿,如美国AOL公司的Instan

2、t Messenger, Yahoo公司的Yahoo Messenger等。有调查资料甚至列出了国外多达18种的即时通信软件。在我国,深圳腾讯公司1999年2月推出了腾讯QQ。目前国内数十家公司拥有自主知识产权的即时通信产品。ICQ公司号称建立了世界上最大的网络用户群,拥有12亿注册用户遍布全球。而腾讯公司则建立了中国最大的互联网注册用户群。在技术层面上,即时通信系统也从最早的专用即时通信工具发展到了最新的XML网站集成服务。更有甚者,美国微软公司把即时通信工具MSN Messenger捆绑在操作系统上随Windows2000等产品发行。短短几年间,即时通信系统迅猛发展,商业产品层出不穷,用户

3、遍布世界各地,技术日新月异。即时通信工具凭借实时、有效的沟通功能,特别是凭借其对虚拟网络社区的建设,赢得了广大互联网用户的喜爱。目前,它又通过集成其他媒体、拓展应用模式等方式继续发展壮大,进军电子商务、计算机协同工作等更广阔的天地。本设计通过实际动手,用VC实现简单的即时通信系统,达到熟悉即时通信软件的应用环境及背景,熟悉即时通信软件的常用开发技术的目的。本设计将最主要研究在这类即时通讯软件的开发中是如何运用SOCKET套接字编程技术来实现通讯交流。本设计按照软件工程的思想从需求分析着手,进行总体设计,详细设计,编码及调试等步骤。其中通信部分软件的设计与开发是本设计的重点。本设计采用了CS体系

4、结构和P2P方式通信的思想进行软件总体设计;撰写用以保证通信安全的密码算法,设计相关的密钥管理方案。1.2 文件传输与聊天系统的发展现状现在国内面向个人的即时通信产品主要有腾讯QQ、微软MSN、网易泡泡、ICQ、雅虎通以及发展势头正猛的TOMskype等。面向企业用户的即时通信产品比较多,但除了腾讯、微软等少数运营商用户比较多以外,其他产品推出时间都很短,用户极少。虽然即时通信业务已日益成熟,但目前各类即时通信软件及服务都存在不少缺陷,需要改进:(1)安全性问题。目前,大多数即时通信系统的安全性较差,极易受到病毒攻击。QQ、MSN就相继遭受过病毒的侵袭以及由网络故障带来的稳定性问题。即时通信要

5、想进一步发展,首先要解决的就是安全性问题。(2)互联互通问题。受多种因素制约,各即时通信工具间的互联互通问题至今未解决。随着即时通信企业用户规模的进一步扩大,如何将不同的即时通信工具实现互联,以实现跨不同即时通信系统的即时通信就成了不可回避的话题。(3)差异化问题。市场上的几大即时通信工具,它们在服务功能、市场定位和目标市场选择上都基本雷同,缺乏特色。即时通信如果继续如此近乎无差异化地发展下去,最后唯一的结果就是竞争日益激烈,不利于即时通信的发展。1.3 本论文的组织结构第1章是前言,主要介绍文件传输与聊天系统的背景、选题的意义以及本论文的组织结构。第2章是文件传输与聊天系统开发的技术基础,主

6、要介绍开发即时通信软件的一些基本技术,网络开发的背景知识以及SOCKET API和MFC SOCKET编程的基础。第3章和第4章是文件传输与聊天系统系统分析及网络设计,主要详细的介绍开发即时通信软件网络设计的全过程,包括消息格式的设计,应用层协议的分析,以及相关网络通信类的描述,是本论文的重点。第5章是文件传输与聊天系统网络设计的结果分析,主要总结出本论文设计的结果并进行分析。最后的部分是结论、参考文献、致谢以及附录。2 文件传输与聊天系统开发的技术基础2.1 网络协议简介2.1.1 TCP/IP网络层次模型当谈到TCP/IP模型的时候,不得不首先介绍OSI层次模型,虽然OSI参考模型的实际应

7、用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,而在现实网络世界里,TCP/IP协议栈获得了更为广泛的应用。OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国际标准化组织(International Standard Organization,ISO)提出的一个网络系统互连模型。OSI模型从上到下分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。TCP/IP参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层(数据链路层)。在TCP/IP

8、参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层。TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。很多高级应用协议都是在这个层次实现的,在基于TCP协议中,比如文件传输协议FTP(File Transfer Protocol)、简单邮件传输协议SMTP(Simpel Mail Translate Protocol)、超文本链接协议HTTP(Hyper Text Transfer Protocol);基于UDP协议中,比如域名系统DNS(Demain Name System

9、),简单文件传输协议TFTP(Trivial File Transfer Protocol)等。2.1.2 TCP和UDP协议基础尽管TCP和UDP都使用相同的网络层(IP)且都工作在传输层,TCP却向应用层提供与UDP完全不同的服务。TCP协议提供了一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似,先是拨号振铃,等待对方接电话后,然后再进行说话交流。只有当建立好TCP连接后,双方才可以进行通信。与TCP不同,UDP是一种简单的无连接的面向数据报的传输层协议,它是不可靠的,它把应

10、用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地,使用UDP协议的场合与TCP是不一样的,或许正因为它的无连接性使得UDP传输的效率很高,这也是为什么即使它的可靠性不高但是依然存在的理由。本次设计大量使用了UDP协议进行传输数据,并针对它的不可靠性做些处理。2.2 Socket套接字编程2.2.1 Socket套接字简介网络程序设计全靠套接字(SOCKET)接收和发送信息。什么是套接字?套接字的英文原意是“孔”或“插座”,作为BSD UNIX的进程通信机制,取后一种意义。套接字实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则没有办法建立联系并相互通信的。

11、套接字是面向客户服务器模型设计,针对客户和服务器提供不同的套接字操作。套接字有三种类型:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字。流式套接字可以提供可靠的、面向连接的通信流,对应于TCP协议。通过流式套接字接收的数据顺序和发送的数据顺序是一致的。数据报套接字定义了一种无连接的服务,对应于UDP协议。数据通过相互独立报文进行传输,是无序的,并且不保证可靠、无差错。原始套接字允许对底层协议如IP和ICMP直接访问,主要用于新的网络协议的开发实现和测试等,它工作在网络互连层,对程序员的要求比较高。Socket提供了一组通用的函数组,这些函数在现在绝大部分

12、操作系统中都提供内核的支持,所以无论是什么编程语言,比如C,Perl,Java,Pascal,Basic等都可以提供这些函数的接口,使得Socket编程具有一定的移植性。2.2.2 Socket函数以及TCP客户机/服务器模型下面是传统的Socket函数接口,这些函数已经足够编制出功能强大的网络应用程序了。int socket(int domain, int type, int protocol);int bind(int sockfd, struct sockaddr *hostaddr, int addrlen);int listen(int sockfd, int backlog);in

13、t recv(int sockfd, void *buf,int len, int flags);int send(int sockfd,void *buf,int len,int flags);int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr * from, int *fromlen);int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to, int tolen);int se

14、lect(int nfds, fd_set* readfds,fd_set* writefds,fd_set*exceptfds, struct timeval* timeout);传统的socket套接字函数是编写网络程序的基础,即便是使用MFC中的CSocket类来进行网络编程,对底层Socket API的了解也是非常有益的。以下为TCP客户机/服务器模型,如图2.1所示:图2.1 TCP客户机/服务器模型2.3 MFC网络编程类VC中提供的CSocket类以及CAsyncSocket类使得编写网络程序变得很简单,从创建套接字到数据的接收和发送都变得非常快捷,下面就主要就本设计将要用到的C

15、AsyncSocket类进行重点描述。 创建一个套接字创建套接字一般分为两个步骤。先通过调用CAsyncSocket的构造函数不带参数,它创建一个空的套接字对象,真正的创建工作由Create函数完成,其函数原型如下:BOOL Create ( UINT nSocketPort=0, Int nSocketType=SOCK_STREAM, Long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE, LPCTSTR lpszSocketAddress=NULL,);nSocketPort为套接字指定一个端口,若是服务器套接

16、字,那么应该为其指定一个端口。如果是客户机套接字,则使用默认值即可。nSocketType指定套接字的类型。默认是流套接字(SOCK_STRAEM).如果设为SOCK_DGRAM,那么将创建数据报套接字。lEvent用于指定要生成的事件通知。默认所有事件都会生成通知lpszSocketAddress是套接字的网络地址,默认表示指定为本机地址。 建立与服务器的连接客户套接字可以使用CAsyncSocket 的Connect函数创建与服务器的连接。如果成功则返回TRUE,否则返回FALSE。失败时可以调用GetLastError函数获得错误信息。Connect函数原型如下:BOOL Connect

17、( LPCTSTR lpszHostAddress,UINT nHostPort,;BOOL Connect( const SOCKADDR* lpSockAddr, int nSockAddrLen);lpszHostAddress为套接字的主机网络地址,为IP地址或者机器名称。nHostPort为应用程序套接字的主机端口号。lpSockAddr为套接字地址指针。nSockAddrLen为套接字地址长度。 服务器的监听和接收客户端的请求Listen函数原型:BOOL Listen( int nConnectionBacklog = 5 );Accept函数原型:virtual BOOL Ac

18、cept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL );rConnectedSocket为当来了一个新的连接的时候所给的一个套接字的引用,以后就可以用这个新的套接字进行通信。lpSockAddr为接收到的客户机的地址,指针类型。lpSockAddrLen为接收到的客户机地址的长度的指针。 数据的发送与接收CAsyncSocket和Socket API中接收发送函数是一致的。 重载函数CAsyncSocket是异步模式,因此在进行一些处理的时候比如监听(Liste

19、n)或接收(Accept)时它不会阻塞后面的操作而是直接返回,为了能够处理相关事件必须要重载CAsyncSocket的相关函数。在服务器端一般都会重载以下函数:virtual void OnAccept(int nErrorCode); /当有接收事件发生时调用该函数virtual void OnReceive(int nErrorCode);/当有数据到达的时候调用该函数virtual void OnClose(int nErrorCode);/当客户端关闭套接字的时候调用该函数在客户端一般会重载以下函数:virtual void OnClose(int nErrorCode); /当有服务

20、器关闭套接字的时候调用该函数virtual void OnConnect(int nErrorCode);/当连接到服务器的时候调用该函数virtual void OnReceive(int nErrorCode);/当接收到数据的时候调用该函数2.4 开发环境及相关知识介绍所有代码将在Windows XP SP2+VC.NET环境下开发;服务器的数据库支持使用Access+ODBC处理;密码算法使用国际上标准的DES算法和MD5单向加密算法来处理。3 文件传输与聊天系统系统分析3.1 文件传输与聊天系统的开发概要3.1.1 开发目的以及内容要求熟悉即时通信软件的应用环境及背景,熟悉即时通信软

21、件的常用开发技术,主要是网络技术,SOCKET编程技术,网络数据库技术,以及网络安全技术。软件开发基于WINDOWS平台在VC上实现;按照软件工程的思想从需求分析着手,进行总体设计,详细设计,编码及调试等步骤;SOCKET可以使用API也可以使用已有类;通信部分软件的设计与开发是本设计的重点。采用CS体系结构和P2P方式通信的思想进行软件总体设计;撰写用以保证通信安全的密码算法,设计相关的密钥管理方案。3.1.2该软件开发的技术指标软件功能完整,应有即时消息通信、文件传输等基本功能,能支持的客户端的个数不少于254个;软件界面友好;通过服务器进行消息中转;要求至少能应用于局域网环境,最好能应用

22、于INTERNET环境。应用数据库对通信用户及通信消息、活动日志等进行管理;能实现查询操作;对传输活动及消息进行加密管理,采用的算法应是国际上著名的算法,算法实现可以利用已有的API函数,借鉴现有成熟的代码,也可以自主完成;有完整的无明显漏洞的密钥管理方案及实现。3.1.3 该软件开发的功能描述 基本功能描述 用户的注册通过服务器的用户管理,提供用户的注册功能。用户只有通过注册的方式才可以与其他注册的用户进行信息的交流。注册的信息最重要的就是用户的昵称以及密码,当然还包括其他个人资料信息。用户唯一的标志是服务器提供的用户号码,当且仅当用户提出注册请求的时候,服务器才根据数据库中的信息提供新的用

23、户一个用户号码,用户通过号码和个人密码进行后续的登陆操作。 用户的登陆通过服务器的用户管理,提供用户的登陆功能。用户只有通过登陆的方式才可以进入主界面获取其好友列表,然后才可以进行信息的交流和其他操作。用户的登陆操作会在服务器进行相关的记录,服务器可以随时查询在线用户的信息。用户的登陆应该是安全的,号码和密码信息都传输到服务器的过程中会经过动态加密,即时是同一个用户在同一地点进行多次登陆的时候,在网络传输的登陆相关信息也不是相同的,这才可以保证登陆的最大化安全。 添加好友功能用户在注册并成功登陆后可以获取其好友列表,最初的时候每个用户都是没有任何好友的,因此本设计需要提供可以添加好友的功能以便

24、让用户有信息沟通的对象。不但可以添加在线的好友对于不在线的好友也可以发出添加好友的请求,服务器应该根据不同的用户的状态进行不同处理,当用户不在线的时候,应该将添加好友的请求信息保存在服务器的数据库中,以便当被添加者上线的时候将该添加请求发送出去。服务器对于添加好友的请求需要将相关信息进行数据库的操作。添加好友是个双向过程,当一方添加成功了另一方的时候,两者都需要在自己的好友列表中添加一个好友信息。 删除好友功能用户不仅可以添加好友也可以删除好友。当用户向服务器提出删除好友的请求后,服务器需要进行数据库的处理以便删除好友的记录在用户的信息里面得到更新,同时也需要通知被删除者被删除的过程。删除好友

25、的操作也是一个双向的过程,在客户的双方都要将对方在自己的好友列表中删除掉。这和添加好友是一致的。 消息传送功能这是一个最基本的功能,即时通信最基础的要求就是要进行通讯信息的传送。具体表现为当一方客户需要向另一发客户发送消息的时候,只需要在好友列表中选择该好友,继而在弹出的对话框中输入通信内容,点击发送按钮后该消息将通过服务器的中转转发到接收方的客户端并弹出消息聊天对话框进行显示。这里传送消息有两种情况,其一是对方是在线用户,那么服务器马上可以进行转发而不用有任何的延迟;其二是对不在线的用户,如果对方不在线那么服务器需要将传送的信息保存在数据库中,一旦对方上线的时候再将未转发的信息发给该上线者。

26、 文件传输功能这个也是基本功能之一。登陆成功后的双方用户为了某种要求需要进行文件的传输,显然文件传输应该是点对点的并且使用TCP连接才能保证文件传输的可靠性。一方用户A点击文件传输的选项继而选择要传输的文件名,此时在该用户实际已经建立起一个TCP监听套接字,在另一方的客户B将接收到对于文件传输的接收请求,同意或者拒绝接收文件。当客户B选择接收的时候即将调用connect函数远程连接到客户A,然后进行文件的传输。文件的传输是分段处理的因为对于大文件来说一定要进行分段分割的传输。 查找用户功能本设计需要提供用户的查询功能。某用户可以查询到当前在线的用户以及指定信息的用户。这里的指定信息主要是指用户

27、号码,通过用户的号码来查询用户的个人信息。当然还可以通过昵称、国家、地区、年龄、性别等信息进行模糊查询。 个人信息修改本设计提供个人信息的修改功能。当个人用户需要修改自己的某个资料时,比如自己的密码,自己的昵称等,用户将修改好的信息传送给服务器,服务器根据相关信息进行数据库的修改将该用户的资料更新。 查看好友信息本设计提供查看好友信息的功能。对于某个好友,客户端向服务器发送查看该好友信息的请求,服务器操作数据库提取相关信息然后传送给客户端。客户端接收到好友信息后进行显示。 服务器的日志记录功能对于每个客户的活动,比如注册,登陆,上线时间等服务器都会进行日志的记录,以便于服务器的管理。 服务器的

28、后台管理服务器的后台管理表示服务器通过查询数据库可以了解所有用户的信息,可以统计在线的人数,可以群体发布一些系统的公告。 服务器网络处理该功能是整个文件传输与聊天系统的核心。服务器应该可以协调多用户的请求服务,当用户的请求消息来临时能够通过开辟线程的方式来进行并行处理,服务器对客户的应答应该时快速的,对用户来说不应该感觉到有延迟。 附加功能描述 用户状态改变功能用户可以改变自己的状态,比如在线,隐身,忙碌,离线等。用户状态的改变先通知服务器,服务器再将该用户状态改变的通知发送给该用户所有在线的好友,一旦好友接收到此通知后,将进行界面的处理,将这个用户的状态在自己的好友列表中修改。 用户退出客户

29、端程序的功能当用户选择退出客户端软件的时候,该客户需要通知服务器下线通知,以便服务器能了解该用户的状态信息,同时进行相关的数据库处理。当某用户退出系统的时候,服务器需要通知该用户的其他好友,使得其他好友能明白该用户已经下线,与用户状态改变的功能是一致的。 用户保持在线的激活功能该功能表示用户和服务器在一定的时候内需要进行互相的激活,以便服务器能够准确的知道某个用户还在线。该功能的提出是因为用户可能会非法退出程序,比如非法关机,死机等情况,这个时候客户端软件无法正常的告诉服务器自己的退出请求。服务器将定时给在线用户发送激活消息,在一定时间内用户若没有应答,即做出该用户已经下线的判断,并做出相关的

30、处理。系统用例图:图3.1 系统用例图3.2 文件传输与聊天系统的应用层协议设计以及相关数据结构3.2.1数据包格式定义为了让通信双方遵守一定的规则,必须要定义通信数据包的格式,如图3-2所示为本设计定义的数据包结构。版本号功能号数据内容加密后的长度未加密前的原始数据内容长度要传输的数据内容4个字节 4个字节 4个字节 4个字节 长度由前面的字段决定图3.2 数据包结构前面的4个字段构成了数据包头部,后面的为数据内容。换而言之,本设计的每个数据包都由数据包头部和数据内容组成:数据包数据头部+数据内容其中: 版本号版本号为该数据包的版本系统号,这样的设计是便于以后系统的扩展;另一方面也可以判断该

31、数据包是不是合法的数据包,当服务器或者是客户端接收到的数据不是以指定的版本号开头说明该数据包是不是本系统要求的,那么可以一开始就剔除掉,以免后面错误的发生。版本号的长度为4个字节。 功能号功能号用于指定该数据包的用途。每个数据包都具有特定的功能作用,服务器或者是客户端对于接收到数据包就是根据不同的功能号才进行不同处理。也只有通过功能号才可以区分不同的数据包。功能号的长度为4个字节。 数据内容加密后的长度因为本设计的加密系统只是对数据内容进行加密,数据包头部是不会被加密的。该字段指明了原始的数据内容进行加密后的长度,因为加密系统对数据加密后的密文长度可能是改变了的。本字段长度为4个字节。 未加密前的原始数据内容长度本字段4个字节,记录数据内容在未加密之前的长度,和字段配合只用足可以让加密后的数据内容解密还原。 要传输的数据内容该字段的内容在传输前经过了加密,这里讨论未加密前的数据内容格式。不同功能号对应的数据内容也是不一样的。根据功能号定义了不同数据内容的格式,数据内容的定义和功能号是一一对应的,比如若是功能号为a的数据包,那么它的数据内容的结构定义为struct content_a,依次类推。下面介绍所有的数据内容格式,里面出现的数据类型在附录中均有定义。(1) 功能号0功能描述:客户端与服务器之间的激活消息,客户

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1