文件传输与聊天系统设计论文

上传人:汽*** 文档编号:490951521 上传时间:2022-08-25 格式:DOC 页数:42 大小:301.50KB
返回 下载 相关 举报
文件传输与聊天系统设计论文_第1页
第1页 / 共42页
文件传输与聊天系统设计论文_第2页
第2页 / 共42页
文件传输与聊天系统设计论文_第3页
第3页 / 共42页
文件传输与聊天系统设计论文_第4页
第4页 / 共42页
文件传输与聊天系统设计论文_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《文件传输与聊天系统设计论文》由会员分享,可在线阅读,更多相关《文件传输与聊天系统设计论文(42页珍藏版)》请在金锄头文库上搜索。

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

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

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

4、件总体设计;撰写用以保证通信安全的密码算法,设计相关的密钥管理方案。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参考模型中,去掉了OSI参考模型

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

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

10、但是并不保证它们能到达目的地,使用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);int recv(int sockf

13、d, 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 select(int nfds, f

14、d_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类使得编写网络程序变得很简单,从创建套接字到数据的接收和发送都变得非常快捷,下面就主要就本设计将要用到的CAsyncSocket类进行重点

15、描述。 创建一个套接字创建套接字一般分为两个步骤。先通过调用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(LPCTSTR lpszHostAddress,UINT n

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号