文件传输与聊天系统设计论文Word文件下载.docx

上传人:b****1 文档编号:5792042 上传时间:2023-05-05 格式:DOCX 页数:48 大小:264.76KB
下载 相关 举报
文件传输与聊天系统设计论文Word文件下载.docx_第1页
第1页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第2页
第2页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第3页
第3页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第4页
第4页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第5页
第5页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第6页
第6页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第7页
第7页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第8页
第8页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第9页
第9页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第10页
第10页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第11页
第11页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第12页
第12页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第13页
第13页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第14页
第14页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第15页
第15页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第16页
第16页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第17页
第17页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第18页
第18页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第19页
第19页 / 共48页
文件传输与聊天系统设计论文Word文件下载.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

文件传输与聊天系统设计论文Word文件下载.docx

《文件传输与聊天系统设计论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《文件传输与聊天系统设计论文Word文件下载.docx(48页珍藏版)》请在冰点文库上搜索。

文件传输与聊天系统设计论文Word文件下载.docx

现在国内面向个人的即时通信产品主要有腾讯QQ、微软MSN、网易泡泡、ICQ、雅虎通以及发展势头正猛的TOM-skype等。

面向企业用户的即时通信产品比较多,但除了腾讯、微软等少数运营商用户比较多以外,其他产品推出时间都很短,用户极少。

虽然即时通信业务已日益成熟,但目前各类即时通信软件及服务都存在不少缺陷,需要改进:

(1)安全性问题。

目前,大多数即时通信系统的安全性较差,极易受到病毒攻击。

QQ、MSN就相继遭受过病毒的侵袭以及由网络故障带来的稳定性问题。

即时通信要想进一步发展,首先要解决的就是安全性问题。

(2)互联互通问题。

受多种因素制约,各即时通信工具间的互联互通问题至今未解决。

随着即时通信企业用户规模的进一步扩大,如何将不同的即时通信工具实现互联,以实现跨不同即时通信系统的即时通信就成了不可回避的话题。

(3)差异化问题。

市场上的几大即时通信工具,它们在服务功能、市场定位和目标市场选择上都基本雷同,缺乏特色。

即时通信如果继续如此近乎无差异化地发展下去,最后唯一的结果就是竞争日益激烈,不利于即时通信的发展。

1.3本论文的组织结构

第1章是前言,主要介绍文件传输与聊天系统的背景、选题的意义以及本论文的组织结构。

第2章是文件传输与聊天系统开发的技术基础,主要介绍开发即时通信软件的一些基本技术,网络开发的背景知识以及SOCKETAPI和MFCSOCKET编程的基础。

第3章和第4章是文件传输与聊天系统系统分析及网络设计,主要详细的介绍开发即时通信软件网络设计的全过程,包括消息格式的设计,应用层协议的分析,以及相关网络通信类的描述,是本论文的重点。

第5章是文件传输与聊天系统网络设计的结果分析,主要总结出本论文设计的结果并进行分析。

最后的部分是结论、参考文献、致谢以及附录。

2文件传输与聊天系统开发的技术基础

2.1网络协议简介

2.1.1TCP/IP网络层次模型

当谈到TCP/IP模型的时候,不得不首先介绍OSI层次模型,虽然OSI参考模型的实际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,而在现实网络世界里,TCP/IP协议栈获得了更为广泛的应用。

OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(OpenSystemInterconnectionReferenceModel,OSI/RM),它是由国际标准化组织(InternationalStandardOrganization,ISO)提出的一个网络系统互连模型。

OSI模型从上到下分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

TCP/IP参考模型分为四个层次:

应用层、传输层、网络互连层和主机到网络层(数据链路层)。

在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。

同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层。

TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。

很多高级应用协议都是在这个层次实现的,在基于TCP协议中,比如文件传输协议FTP(FileTransferProtocol)、简单邮件传输协议SMTP(SimpelMailTranslateProtocol)、超文本链接协议HTTP(HyperTextTransferProtocol);

基于UDP协议中,比如域名系统DNS(DemainNameSystem),简单文件传输协议TFTP(TrivialFileTransferProtocol)等。

2.1.2TCP和UDP协议基础

尽管TCP和UDP都使用相同的网络层(IP)且都工作在传输层,TCP却向应用层提供与UDP完全不同的服务。

TCP协议提供了一种面向连接的、可靠的字节流服务。

面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。

这一过程与打电话很相似,先是拨号振铃,等待对方接电话后,然后再进行说话交流。

只有当建立好TCP连接后,双方才可以进行通信。

与TCP不同,UDP是一种简单的无连接的面向数据报的传输层协议,它是不可靠的,它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地,使用UDP协议的场合与TCP是不一样的,或许正因为它的无连接性使得UDP传输的效率很高,这也是为什么即使它的可靠性不高但是依然存在的理由。

本次设计大量使用了UDP协议进行传输数据,并针对它的不可靠性做些处理。

2.2Socket套接字编程

2.2.1Socket套接字简介

网络程序设计全靠套接字(SOCKET)接收和发送信息。

什么是套接字?

套接字的英文原意是“孔”或“插座”,作为BSDUNIX的进程通信机制,取后一种意义。

套接字实质上提供了进程通信的端点。

进程通信之前,双方首先必须各自创建一个端点,否则没有办法建立联系并相互通信的。

套接字是面向客户—服务器模型设计,针对客户和服务器提供不同的套接字操作。

套接字有三种类型:

流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字。

流式套接字可以提供可靠的、面向连接的通信流,对应于TCP协议。

通过流式套接字接收的数据顺序和发送的数据顺序是一致的。

数据报套接字定义了一种无连接的服务,对应于UDP协议。

数据通过相互独立报文进行传输,是无序的,并且不保证可靠、无差错。

原始套接字允许对底层协议如IP和ICMP直接访问,主要用于新的网络协议的开发实现和测试等,它工作在网络互连层,对程序员的要求比较高。

Socket提供了一组通用的函数组,这些函数在现在绝大部分操作系统中都提供内核的支持,所以无论是什么编程语言,比如C,Perl,Java,Pascal,Basic等都可以提供这些函数的接口,使得Socket编程具有一定的移植性。

2.2.2Socket函数以及TCP客户机/服务器模型

下面是传统的Socket函数接口,这些函数已经足够编制出功能强大的网络应用程序了。

intsocket(intdomain,inttype,intprotocol);

intbind(intsockfd,structsockaddr*hostaddr,intaddrlen);

intlisten(intsockfd,intbacklog);

intrecv(intsockfd,void*buf,intlen,intflags);

intsend(intsockfd,void*buf,intlen,intflags);

intrecvfrom(intsockfd,void*buf,intlen,unsignedintflags,

structsockaddr*from,int*fromlen);

intsendto(intsockfd,constvoid*msg,intlen,unsignedintflags,

structsockaddr*to,inttolen);

intselect(intnfds,fd_set*readfds,fd_set*writefds,

fd_set*exceptfds,structtimeval*timeout);

传统的socket套接字函数是编写网络程序的基础,即便是使用MFC中的CSocket类来进行网络编程,对底层SocketAPI的了解也是非常有益的。

以下为TCP客户机/服务器模型,如图2.1所示:

图2.1TCP客户机/服务器模型

2.3MFC网络编程类

VC中提供的CSocket类以及CAsyncSocket类使得编写网络程序变得很简单,从创建套接字到数据的接收和发送都变得非常快捷,下面就主要就本设计将要用到的CAsyncSocket类进行重点描述。

①创建一个套接字

创建套接字一般分为两个步骤。

先通过调用CAsyncSocket的构造函数不带参数,它创建一个空的套接字对象,真正的创建工作由Create函数完成,其函数原型如下:

BOOLCreate(

UINTnSocketPort=0,

IntnSocketType=SOCK_STREAM,

LonglEvent=

FD_READ|FD_WRITE|FD_OOB|

FD_ACCEPT|FD_CONNECT|FD_CLOSE,

LPCTSTRlpszSocketAddress=NULL,

);

nSocketPort为套接字指定一个端口,若是服务器套接字,那么应该为其指定一个端口。

如果是客户机套接字,则使用默认值即可。

nSocketType指定套接字的类型。

默认是流套接字(SOCK_STRAEM).如果设为SOCK_DGRAM,那么将创建数据报套接字。

lEvent用于指定要生成的事件通知。

默认所有事件都会生成通知

lpszSocketAddress是套接字的网络地址,默认表示指定为本机地址。

②建立与服务器的连接

客户套接字可以使用CAsyncSocket的Connect函数创建与服务器的连接。

如果成功则返回TRUE,否则返回FALSE。

失败时可以调用GetLastError函数获得错误信息。

Connect函数原型如下:

BOOLConnect(

LPCTSTRlpszHostAddress,

UINTnHostPort,

};

constSOCKADDR*lpSockAddr,

intnSockAddrLen

lpszHostAddress为套接字的主机网络地址,为IP地址或者机器名称。

nHostPort为应用程序套接字的主机端口号。

lpSockAddr为套接字地址指针。

nSockAddrLen为套接字地址长度。

③服务器的监听和接收客户端的请求

Listen函数原型:

BOOLListen(

intnConnectionBacklog=5

Accept函数原型:

virtualBOOLAccept(

CAsyncSocket&

rConnectedSocket,

SOCKADDR*lpSockAddr=NULL,

int*lpSockAddrLen=NULL

rConnectedSocket为当来了一个新的连接的时候所给的一个套接字的引用,以后就可以用这个新的套接字进行通信。

lpSockAddr为接收到的客户机的地址,指针类型。

lpSockAddrLen为接收到的客户机地址的长度的指针。

④数据的发送与接收

CAsyncSocket和SocketAPI中接收发送函数是一致的。

⑤重载函数

CAsyncSocket是异步模式,因此在进行一些处理的时候比如监听(Listen)或接收(Accept)时它不会阻塞后面的操作而是直接返回,为了能够处理相关事件必须要重载CAsyncSocket的相关函数。

在服务器端一般都会重载以下函数:

virtualvoidOnAccept(intnErrorCode);

////当有接收事件发生时调用该函数

virtualvoidOnReceive(intnErrorCode);

////当有数据到达的时候调用该函数

virtualvoidOnClose(intnErrorCode);

////当客户端关闭套接字的时候调用该函数

在客户端一般会重载以下函数:

////当有服务器关闭套接字的时候调用该函数

virtualvoidOnConnect(intnErrorCode);

///当连接到服务器的时候调用该函数

////当接收到数据的时候调用该函数

2.4开发环境及相关知识介绍

所有代码将在WindowsXPSP2+VC.NET环境下开发;

服务器的数据库支持使用Access+ODBC处理;

密码算法使用国际上标准的DES算法和MD5单向加密算法来处理。

3文件传输与聊天系统系统分析

3.1文件传输与聊天系统的开发概要

3.1.1开发目的以及内容要求

熟悉即时通信软件的应用环境及背景,熟悉即时通信软件的常用开发技术,主要是网络技术,SOCKET编程技术,网络数据库技术,以及网络安全技术。

软件开发基于WINDOWS平台在VC上实现;

按照软件工程的思想从需求分析着手,进行总体设计,详细设计,编码及调试等步骤;

SOCKET可以使用API也可以使用已有类;

通信部分软件的设计与开发是本设计的重点。

采用CS体系结构和P2P方式通信的思想进行软件总体设计;

3.1.2该软件开发的技术指标

软件功能完整,应有即时消息通信、文件传输等基本功能,能支持的客户端的个数不少于254个;

软件界面友好;

通过服务器进行消息中转;

要求至少能应用于局域网环境,最好能应用于INTERNET环境。

应用数据库对通信用户及通信消息、活动日志等进行管理;

能实现查询操作;

对传输活动及消息进行加密管理,采用的算法应是国际上著名的算法,算法实现可以利用已有的API函数,借鉴现有成熟的代码,也可以自主完成;

有完整的无明显漏洞的密钥管理方案及实现。

3.1.3该软件开发的功能描述

基本功能描述

⑴用户的注册

通过服务器的用户管理,提供用户的注册功能。

用户只有通过注册的方式才可以与其他注册的用户进行信息的交流。

注册的信息最重要的就是用户的昵称以及密码,当然还包括其他个人资料信息。

用户唯一的标志是服务器提供的用户号码,当且仅当用户提出注册请求的时候,服务器才根据数据库中的信息提供新的用户一个用户号码,用户通过号码和个人密码进行后续的登陆操作。

⑵用户的登陆

通过服务器的用户管理,提供用户的登陆功能。

用户只有通过登陆的方式才可以进入主界面获取其好友列表,然后才可以进行信息的交流和其他操作。

用户的登陆操作会在服务器进行相关的记录,服务器可以随时查询在线用户的信息。

用户的登陆应该是安全的,号码和密码信息都传输到服务器的过程中会经过动态加密,即时是同一个用户在同一地点进行多次登陆的时候,在网络传输的登陆相关信息也不是相同的,这才可以保证登陆的最大化安全。

⑶添加好友功能

用户在注册并成功登陆后可以获取其好友列表,最初的时候每个用户都是没有任何好友的,因此本设计需要提供可以添加好友的功能以便让用户有信息沟通的对象。

不但可以添加在线的好友对于不在线的好友也可以发出添加好友的请求,服务器应该根据不同的用户的状态进行不同处理,当用户不在线的时候,应该将添加好友的请求信息保存在服务器的数据库中,以便当被添加者上线的时候将该添加请求发送出去。

服务器对于添加好友的请求需要将相关信息进行数据库的操作。

添加好友是个双向过程,当一方添加成功了另一方的时候,两者都需要在自己的好友列表中添加一个好友信息。

⑷删除好友功能

用户不仅可以添加好友也可以删除好友。

当用户向服务器提出删除好友的请求后,服务器需要进行数据库的处理以便删除好友的记录在用户的信息里面得到更新,同时也需要通知被删除者被删除的过程。

删除好友的操作也是一个双向的过程,在客户的双方都要将对方在自己的好友列表中删除掉。

这和添加好友是一致的。

⑸消息传送功能

这是一个最基本的功能,即时通信最基础的要求就是要进行通讯信息的传送。

具体表现为当一方客户需要向另一发客户发送消息的时候,只需要在好友列表中选择该好友,继而在弹出的对话框中输入通信内容,点击发送按钮后该消息将通过服务器的中转转发到接收方的客户端并弹出消息聊天对话框进行显示。

这里传送消息有两种情况,其一是对方是在线用户,那么服务器马上可以进行转发而不用有任何的延迟;

其二是对不在线的用户,如果对方不在线那么服务器需要将传送的信息保存在数据库中,一旦对方上线的时候再将未转发的信息发给该上线者。

⑹文件传输功能

这个也是基本功能之一。

登陆成功后的双方用户为了某种要求需要进行文件的传输,显然文件传输应该是点对点的并且使用TCP连接才能保证文件传输的可靠性。

一方用户A点击文件传输的选项继而选择要传输的文件名,此时在该用户实际已经建立起一个TCP监听套接字,在另一方的客户B将接收到对于文件传输的接收请求,同意或者拒绝接收文件。

当客户B选择接收的时候即将调用connect函数远程连接到客户A,然后进行文件的传输。

文件的传输是分段处理的因为对于大文件来说一定要进行分段分割的传输。

⑺查找用户功能

本设计需要提供用户的查询功能。

某用户可以查询到当前在线的用户以及指定信息的用户。

这里的指定信息主要是指用户号码,通过用户的号码来查询用户的个人信息。

当然还可以通过昵称、国家、地区、年龄、性别等信息进行模糊查询。

⑻个人信息修改

本设计提供个人信息的修改功能。

当个人用户需要修改自己的某个资料时,比如自己的密码,自己的昵称等,用户将修改好的信息传送给服务器,服务器根据相关信息进行数据库的修改将该用户的资料更新。

⑼查看好友信息

本设计提供查看好友信息的功能。

对于某个好友,客户端向服务器发送查看该好友信息的请求,服务器操作数据库提取相关信息然后传送给客户端。

客户端接收到好友信息后进行显示。

⑽服务器的日志记录功能

对于每个客户的活动,比如注册,登陆,上线时间等服务器都会进行日志的记录,以便于服务器的管理。

⑾服务器的后台管理

服务器的后台管理表示服务器通过查询数据库可以了解所有用户的信息,可以统计在线的人数,可以群体发布一些系统的公告。

⑿服务器网络处理

该功能是整个文件传输与聊天系统的核心。

服务器应该可以协调多用户的请求服务,当用户的请求消息来临时能够通过开辟线程的方式来进行并行处理,服务器对客户的应答应该时快速的,对用户来说不应该感觉到有延迟。

附加功能描述

⑴用户状态改变功能

用户可以改变自己的状态,比如在线,隐身,忙碌,离线等。

用户状态的改变先通知服务器,服务器再将该用户状态改变的通知发送给该用户所有在线的好友,一旦好友接收到此通知后,将进行界面的处理,将这个用户的状态在自己的好友列表中修改。

⑵用户退出客户端程序的功能

当用户选择退出客户端软件的时候,该客户需要通知服务器下线通知,以便服务器能了解该用户的状态信息,同时进行相关的数据库处理。

当某用户退出系统的时候,服务器需要通知该用户的其他好友,使得其他好友能明白该用户已经下线,与用户状态改变的功能是一致的。

⑶用户保持在线的激活功能

该功能表示用户和服务器在一定的时候内需要进行互相的激活,以便服务器能够准确的知道某个用户还在线。

该功能的提出是因为用户可能会非法退出程序,比如非法关机,死机等情况,这个时候客户端软件无法正常的告诉服务器自己的退出请求。

服务器将定时给在线用户发送激活消息,在一定时间内用户若没有应答,即做出该用户已经下线的判断,并做出相关的处理。

系统用例图:

图3.1系统用例图

3.2文件传输与聊天系统的应用层协议设计以及相关数据结构

3.2.1数据包格式定义

为了让通信双方遵守一定的规则,必须要定义通信数据包的格式,如图3-2所示为本设计定义的数据包结构。

版本号

功能号

数据内容加密后的长度

未加密前的原始数据内容长度

要传输的数据内容

4个字节4个字节4个字节4个字节长度由前面的字段决定

图3.2数据包结构

前面的4个字段构成了数据包头部,后面的为数据内容。

换而言之,本设计的每个数据包都由数据包头部和数据内容组成:

数据包=数据头部+数据内容

其中:

①版本号

版本号为该数据包的版本系统号,这样的设计是便于以后系统的扩展;

另一方面也可以判断该数据包是不是合法的数据包,当服务器或者是客户端接收到的数据不是以指定的版本号开头说明该数据包是不是本系统要求的,那么可以一开始就剔除掉,以免后面错误的发生。

版本号的长度为4个字节。

②功能号

功能号用于指定该数据包的用途。

每个数据包都具有特定的功能作用,服务器或者是客户端对于接收到数据包就是根据不同的功能号才进行不同处理。

也只有通过功能号才可以区分不同的数据包。

功能号的长度为4个字节。

③数据内容加密后的长度

因为本设计的加密系统只是对数据内容进行加密,数据包头部是不会被加密的。

该字段指明了原始的数据内容进行加密后的长度,因为加密系统对数据加密后的密文长度可能是改变了的。

本字段长度为4个字节。

④未加密前的原始数据内容长度

本字段4个字节,记录数据内容在未加密之前的长度,和③字段配合只用足可以让加密后的数据内容解密还原。

⑤要传输的数据内容

该字段的内容在传输前经过了加密,这里讨论未加密前的数据内容格式。

不同功能号对应的数据内容也是不一样的。

根据功能号定义了不同数据内容的格式,数据内容的定义和功能号是一一对应的,比如若是功能号为a的数据包,那么它的数据内容的结构定义为structcontent_a,依次类推。

下面介绍所有的数据内容格式,里面出现的数据类型在附录中均有定义。

(1)功能号0

功能描述:

客户端与服务器之间的激活消息,客户端在登陆

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2