




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 文件传输与聊天系统设计 摘要文件传输与聊天系统是当前非常热门与流行的通讯软件,它充分利用网络这样的大平台增强了人们之间的沟通交流。本设计应用socket技术在windows平台上实现文件传输与聊天系统。本设计的软件开发基于windows平台在vc上实现;按照软件工程的思想从需求分析着手,进行总体设计,详细设计,编码及调试等步骤;socket可以使用api也可以使用己有类;采用cs体系结构和p2p方式通信的思想进行软件总体设计;撰写用以保证通信安全的密码算法,设计相关的密钥管理方案。本设计使用软件工程化的设计流程开发整个软件,从需求分析到详细设计以及代码的编制和最终的测试都会得到完整的实现。本
2、设计的重点在于整个系统的网络设计,而服务器的网络设计更为重要。本设计最终给出了构建文件传输与聊天系统的网络层次结构并实现了整个系统的源代码和生成了可执行文件。软件功能完整,应有即时消息通信、文件传输等基本功能,能支持的客户端的个数不少于254个;软件界面友好;可实现p2p通信,也可通过服务器进行消息中转;至少能应用于局域网环境;应用数据库对通信用户及通信消息等进行管理;能实现查询操作。关键词:文件传输与聊天系统,socket编程,聊天,通信,安全。 the design and development ofsecurity instant-messaging software abstract
3、security instant-messaging software is currently really a kind of hot and popular communication software. it makes full use of the internet, the biggest platform at present, to enhance the communication of people. this design applies the technology called socket to the platform of windows in order t
4、o achieve the usage of security instant-messaging software.this designs software development is based on the realization of windows platform on vc. according to the thinking of software engineering, we analyze from demand, and then conduct general design, detailed design, code and testing, etc. sock
5、et can use api or any other present systems. we use cs system structure and p2p method to communicate this thinking is used to conduct the general design of the software. we write with the password algorithm which ensures the safety of telecommunication, and design relevant cipher keys management pl
6、an.this design uses the process of software engineering to develop the whole software. we analyze from demand to detailed design, the construction of code and the final test all will be completely realized. the main point of this design lies in the web design of the whole system, and the servers web
7、 design is more important.this design finally gives the web layers structure of constructing security instant-messaging software, and realized the whole systems kernel and generated executable documents. the software has complete functions, including basic functions such as instant messaging, file t
8、ransmission, etc. it can support more than 254 client-sides. it has a friendly software interface and can realize p2p telecommunication as well as transferring messages through server. it can be applied to local net at least. we can also use database to manage clients who use telecommunication and i
9、nstant messaging, etc. inquiring can also be done.keywords: instant-messaging software, socket programs,talk, communication, security.目录1 前言11.1 文件传输与聊天系统的开发背景及选题意义11.2 文件传输与聊天系统的发展现状21.3 本论文的组织结构22 文件传输与聊天系统开发的技术基础32.1 网络协议简介32.2 socket套接字编程42.3 mfc网络编程类62.4 开发环境及相关知识介绍83 文件传输与聊天系统系统分析93.1 文件传输与聊天系
10、统的开发概要93.2 文件传输与聊天系统的应用层协议设计以及相关数据结构123.3 文件传输与聊天系统的总体模块分析以及网络通信模块设计244 文件传输与聊天系统网络详细设计294.1 公共通信相关类以及函数描述294.2 服务器通信类以及相关函数描述304.3 客户端通信类以及相关函数324.4 客户端的登陆过程以及md5加密344.5 文件传输的过程345 文件传输与聊天系统网络设计的结果分析365.1 服务器的大数据流量控制365.2 服务器对客户端的消息中转技术分析365.3 发送数据的超时与重传处理375.4 客户端与服务器的激活消息375.5 程序运行情况376 结 论40参考文献
11、(references)41致 谢421 前言1.1 文件传输与聊天系统的开发背景及选题意义互联网的普及和发展为人们的沟通提供了多种手段,近年来流行的即时通信是继电子邮件之后的又一种主流通信方式。以色列mirablils公司1996年11月推出了世界上第一个即时通信软件,即后来风靡全球的网络寻呼机icq,宣告了即时通信这一概念的诞生。即时通信系统利用服务器上的用户注册信息和联机用户建立起虚拟社区,服务器为社区成员提供状态信息和联系方式,以便用户之间互相通信,用户使用特定的即时通信客户端登录到服务器,找到他想联系的人进行交流。在icq取得巨大成功之后,许多公司纷纷效仿,如美国aol公司的inst
12、ant messenger, yahoo公司的yahoo messenger等。有调查资料甚至列出了国外多达18种的即时通信软件。在我国,深圳腾讯公司1999年2月推出了腾讯qq。目前国内数十家公司拥有自主知识产权的即时通信产品。icq公司号称建立了世界上最大的网络用户群,拥有12亿注册用户遍布全球。而腾讯公司则建立了中国最大的互联网注册用户群。在技术层面上,即时通信系统也从最早的专用即时通信工具发展到了最新的xml网站集成服务。更有甚者,美国微软公司把即时通信工具msn messenger捆绑在操作系统上随windows2000等产品发行。短短几年间,即时通信系统迅猛发展,商业产品层出不穷,
13、用户遍布世界各地,技术日新月异。即时通信工具凭借实时、有效的沟通功能,特别是凭借其对虚拟网络社区的建设,赢得了广大互联网用户的喜爱。目前,它又通过集成其他媒体、拓展应用模式等方式继续发展壮大,进军电子商务、计算机协同工作等更广阔的天地。本设计通过实际动手,用vc实现简单的即时通信系统,达到熟悉即时通信软件的应用环境及背景,熟悉即时通信软件的常用开发技术的目的。本设计将最主要研究在这类即时通讯软件的开发中是如何运用socket套接字编程技术来实现通讯交流。本设计按照软件工程的思想从需求分析着手,进行总体设计,详细设计,编码及调试等步骤。其中通信部分软件的设计与开发是本设计的重点。本设计采用了cs
14、体系结构和p2p方式通信的思想进行软件总体设计;撰写用以保证通信安全的密码算法,设计相关的密钥管理方案。1.2 文件传输与聊天系统的发展现状现在国内面向个人的即时通信产品主要有腾讯qq、微软msn、网易泡泡、icq、雅虎通以及发展势头正猛的tomskype等。面向企业用户的即时通信产品比较多,但除了腾讯、微软等少数运营商用户比较多以外,其他产品推出时间都很短,用户极少。虽然即时通信业务已日益成熟,但目前各类即时通信软件及服务都存在不少缺陷,需要改进:(1)安全性问题。目前,大多数即时通信系统的安全性较差,极易受到病毒攻击。qq、msn就相继遭受过病毒的侵袭以及由网络故障带来的稳定性问题。即时通
15、信要想进一步发展,首先要解决的就是安全性问题。(2)互联互通问题。受多种因素制约,各即时通信工具间的互联互通问题至今未解决。随着即时通信企业用户规模的进一步扩大,如何将不同的即时通信工具实现互联,以实现跨不同即时通信系统的即时通信就成了不可回避的话题。(3)差异化问题。市场上的几大即时通信工具,它们在服务功能、市场定位和目标市场选择上都基本雷同,缺乏特色。即时通信如果继续如此近乎无差异化地发展下去,最后唯一的结果就是竞争日益激烈,不利于即时通信的发展。1.3 本论文的组织结构第1章是前言,主要介绍文件传输与聊天系统的背景、选题的意义以及本论文的组织结构。第2章是文件传输与聊天系统开发的技术基础
16、,主要介绍开发即时通信软件的一些基本技术,网络开发的背景知识以及socket api和mfc socket编程的基础。第3章和第4章是文件传输与聊天系统系统分析及网络设计,主要详细的介绍开发即时通信软件网络设计的全过程,包括消息格式的设计,应用层协议的分析,以及相关网络通信类的描述,是本论文的重点。第5章是文件传输与聊天系统网络设计的结果分析,主要总结出本论文设计的结果并进行分析。最后的部分是结论、参考文献、致谢以及附录。2 文件传输与聊天系统开发的技术基础2.1 网络协议简介2.1.1 tcp/ip网络层次模型当谈到tcp/ip模型的时候,不得不首先介绍osi层次模型,虽然osi参考模型的实
17、际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,而在现实网络世界里,tcp/ip协议栈获得了更为广泛的应用。osi参考模型(osi/rm)的全称是开放系统互连参考模型(open system interconnection reference model,osi/rm),它是由国际标准化组织(international standard organization,iso)提出的一个网络系统互连模型。osi模型从上到下分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。tcp/ip参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层(数据链路层)。在tcp/
18、ip参考模型中,去掉了osi参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将osi参考模型中的数据链路层和物理层合并为主机到网络层。tcp/ip模型将osi参考模型中的会话层和表示层的功能合并到应用层实现。很多高级应用协议都是在这个层次实现的,在基于tcp协议中,比如文件传输协议ftp(file transfer protocol)、简单邮件传输协议smtp(simpel mail translate protocol)、超文本链接协议http(hyper text transfer protocol);基于udp协议中,比如域名系统dns(demain name syst
19、em),简单文件传输协议tftp(trivial file transfer protocol)等。2.1.2 tcp和udp协议基础尽管tcp和udp都使用相同的网络层(ip)且都工作在传输层,tcp却向应用层提供与udp完全不同的服务。tcp协议提供了一种面向连接的、可靠的字节流服务。面向连接意味着两个使用tcp的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个tcp连接。这一过程与打电话很相似,先是拨号振铃,等待对方接电话后,然后再进行说话交流。只有当建立好tcp连接后,双方才可以进行通信。与tcp不同,udp是一种简单的无连接的面向数据报的传输层协议,它是不可靠的,它
20、把应用程序传给ip层的数据发送出去,但是并不保证它们能到达目的地,使用udp协议的场合与tcp是不一样的,或许正因为它的无连接性使得udp传输的效率很高,这也是为什么即使它的可靠性不高但是依然存在的理由。本次设计大量使用了udp协议进行传输数据,并针对它的不可靠性做些处理。2.2 socket套接字编程2.2.1 socket套接字简介网络程序设计全靠套接字(socket)接收和发送信息。什么是套接字?套接字的英文原意是“孔”或“插座”,作为bsd unix的进程通信机制,取后一种意义。套接字实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则没有办法建立联系并相互通信
21、的。套接字是面向客户服务器模型设计,针对客户和服务器提供不同的套接字操作。套接字有三种类型:流式套接字(sock_stream),数据报套接字(sock_dgram)及原始套接字。流式套接字可以提供可靠的、面向连接的通信流,对应于tcp协议。通过流式套接字接收的数据顺序和发送的数据顺序是一致的。数据报套接字定义了一种无连接的服务,对应于udp协议。数据通过相互独立报文进行传输,是无序的,并且不保证可靠、无差错。原始套接字允许对底层协议如ip和icmp直接访问,主要用于新的网络协议的开发实现和测试等,它工作在网络互连层,对程序员的要求比较高。socket提供了一组通用的函数组,这些函数在现在绝大
22、部分操作系统中都提供内核的支持,所以无论是什么编程语言,比如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);
23、int 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
24、select(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类使得编写网络程序变得很简单,从创建套接字到数据的接收和发送都变得非常快捷,下面就主要就本设计将要用到
25、的casyncsocket类进行重点描述。 创建一个套接字创建套接字一般分为两个步骤。先通过调用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为套接字指定一个端口,若是服务器套接字,那
26、么应该为其指定一个端口。如果是客户机套接字,则使用默认值即可。nsockettype指定套接字的类型。默认是流套接字(sock_straem).如果设为sock_dgram,那么将创建数据报套接字。levent用于指定要生成的事件通知。默认所有事件都会生成通知lpszsocketaddress是套接字的网络地址,默认表示指定为本机地址。 建立与服务器的连接客户套接字可以使用casyncsocket 的connect函数创建与服务器的连接。如果成功则返回true,否则返回false。失败时可以调用getlasterror函数获得错误信息。connect函数原型如下:bool connect(lp
27、ctstr lpszhostaddress,uint nhostport,;bool connect(const sockaddr* lpsockaddr,int nsockaddrlen);lpszhostaddress为套接字的主机网络地址,为ip地址或者机器名称。nhostport为应用程序套接字的主机端口号。lpsockaddr为套接字地址指针。nsockaddrlen为套接字地址长度。 服务器的监听和接收客户端的请求listen函数原型:bool listen( int nconnectionbacklog = 5 );accept函数原型:virtual bool accept(
28、casyncsocket& rconnectedsocket, sockaddr* lpsockaddr = null, int* lpsockaddrlen = null );rconnectedsocket为当来了一个新的连接的时候所给的一个套接字的引用,以后就可以用这个新的套接字进行通信。lpsockaddr为接收到的客户机的地址,指针类型。lpsockaddrlen为接收到的客户机地址的长度的指针。 数据的发送与接收casyncsocket和socket api中接收发送函数是一致的。 重载函数casyncsocket是异步模式,因此在进行一些处理的时候比如监听(listen)或接收(
29、accept)时它不会阻塞后面的操作而是直接返回,为了能够处理相关事件必须要重载casyncsocket的相关函数。在服务器端一般都会重载以下函数:virtual void onaccept(int nerrorcode); /当有接收事件发生时调用该函数virtual void onreceive(int nerrorcode);/当有数据到达的时候调用该函数virtual void onclose(int nerrorcode);/当客户端关闭套接字的时候调用该函数在客户端一般会重载以下函数:virtual void onclose(int nerrorcode); /当有服务器关闭套接字
30、的时候调用该函数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 开发目的以及内容要求熟悉即时通信软件的应用环境及背景,熟悉即时通信软件的常用开发
31、技术,主要是网络技术,socket编程技术,网络数据库技术,以及网络安全技术。软件开发基于windows平台在vc上实现;按照软件工程的思想从需求分析着手,进行总体设计,详细设计,编码及调试等步骤;socket可以使用api也可以使用已有类;通信部分软件的设计与开发是本设计的重点。采用cs体系结构和p2p方式通信的思想进行软件总体设计;撰写用以保证通信安全的密码算法,设计相关的密钥管理方案。3.1.2该软件开发的技术指标软件功能完整,应有即时消息通信、文件传输等基本功能,能支持的客户端的个数不少于254个;软件界面友好;通过服务器进行消息中转;要求至少能应用于局域网环境,最好能应用于inter
32、net环境。应用数据库对通信用户及通信消息、活动日志等进行管理;能实现查询操作;对传输活动及消息进行加密管理,采用的算法应是国际上著名的算法,算法实现可以利用已有的api函数,借鉴现有成熟的代码,也可以自主完成;有完整的无明显漏洞的密钥管理方案及实现。3.1.3 该软件开发的功能描述 基本功能描述 用户的注册通过服务器的用户管理,提供用户的注册功能。用户只有通过注册的方式才可以与其他注册的用户进行信息的交流。注册的信息最重要的就是用户的昵称以及密码,当然还包括其他个人资料信息。用户唯一的标志是服务器提供的用户号码,当且仅当用户提出注册请求的时候,服务器才根据数据库中的信息提供新的用户一个用户号
33、码,用户通过号码和个人密码进行后续的登陆操作。 用户的登陆通过服务器的用户管理,提供用户的登陆功能。用户只有通过登陆的方式才可以进入主界面获取其好友列表,然后才可以进行信息的交流和其他操作。用户的登陆操作会在服务器进行相关的记录,服务器可以随时查询在线用户的信息。用户的登陆应该是安全的,号码和密码信息都传输到服务器的过程中会经过动态加密,即时是同一个用户在同一地点进行多次登陆的时候,在网络传输的登陆相关信息也不是相同的,这才可以保证登陆的最大化安全。 添加好友功能用户在注册并成功登陆后可以获取其好友列表,最初的时候每个用户都是没有任何好友的,因此本设计需要提供可以添加好友的功能以便让用户有信息
34、沟通的对象。不但可以添加在线的好友对于不在线的好友也可以发出添加好友的请求,服务器应该根据不同的用户的状态进行不同处理,当用户不在线的时候,应该将添加好友的请求信息保存在服务器的数据库中,以便当被添加者上线的时候将该添加请求发送出去。服务器对于添加好友的请求需要将相关信息进行数据库的操作。添加好友是个双向过程,当一方添加成功了另一方的时候,两者都需要在自己的好友列表中添加一个好友信息。 删除好友功能用户不仅可以添加好友也可以删除好友。当用户向服务器提出删除好友的请求后,服务器需要进行数据库的处理以便删除好友的记录在用户的信息里面得到更新,同时也需要通知被删除者被删除的过程。删除好友的操作也是一
35、个双向的过程,在客户的双方都要将对方在自己的好友列表中删除掉。这和添加好友是一致的。 消息传送功能这是一个最基本的功能,即时通信最基础的要求就是要进行通讯信息的传送。具体表现为当一方客户需要向另一发客户发送消息的时候,只需要在好友列表中选择该好友,继而在弹出的对话框中输入通信内容,点击发送按钮后该消息将通过服务器的中转转发到接收方的客户端并弹出消息聊天对话框进行显示。这里传送消息有两种情况,其一是对方是在线用户,那么服务器马上可以进行转发而不用有任何的延迟;其二是对不在线的用户,如果对方不在线那么服务器需要将传送的信息保存在数据库中,一旦对方上线的时候再将未转发的信息发给该上线者。 文件传输功
36、能这个也是基本功能之一。登陆成功后的双方用户为了某种要求需要进行文件的传输,显然文件传输应该是点对点的并且使用tcp连接才能保证文件传输的可靠性。一方用户a点击文件传输的选项继而选择要传输的文件名,此时在该用户实际已经建立起一个tcp监听套接字,在另一方的客户b将接收到对于文件传输的接收请求,同意或者拒绝接收文件。当客户b选择接收的时候即将调用connect函数远程连接到客户a,然后进行文件的传输。文件的传输是分段处理的因为对于大文件来说一定要进行分段分割的传输。 查找用户功能本设计需要提供用户的查询功能。某用户可以查询到当前在线的用户以及指定信息的用户。这里的指定信息主要是指用户号码,通过用
37、户的号码来查询用户的个人信息。当然还可以通过昵称、国家、地区、年龄、性别等信息进行模糊查询。 个人信息修改本设计提供个人信息的修改功能。当个人用户需要修改自己的某个资料时,比如自己的密码,自己的昵称等,用户将修改好的信息传送给服务器,服务器根据相关信息进行数据库的修改将该用户的资料更新。 查看好友信息本设计提供查看好友信息的功能。对于某个好友,客户端向服务器发送查看该好友信息的请求,服务器操作数据库提取相关信息然后传送给客户端。客户端接收到好友信息后进行显示。 服务器的日志记录功能对于每个客户的活动,比如注册,登陆,上线时间等服务器都会进行日志的记录,以便于服务器的管理。 服务器的后台管理服务
38、器的后台管理表示服务器通过查询数据库可以了解所有用户的信息,可以统计在线的人数,可以群体发布一些系统的公告。 服务器网络处理该功能是整个文件传输与聊天系统的核心。服务器应该可以协调多用户的请求服务,当用户的请求消息来临时能够通过开辟线程的方式来进行并行处理,服务器对客户的应答应该时快速的,对用户来说不应该感觉到有延迟。 附加功能描述 用户状态改变功能用户可以改变自己的状态,比如在线,隐身,忙碌,离线等。用户状态的改变先通知服务器,服务器再将该用户状态改变的通知发送给该用户所有在线的好友,一旦好友接收到此通知后,将进行界面的处理,将这个用户的状态在自己的好友列表中修改。 用户退出客户端程序的功能
39、当用户选择退出客户端软件的时候,该客户需要通知服务器下线通知,以便服务器能了解该用户的状态信息,同时进行相关的数据库处理。当某用户退出系统的时候,服务器需要通知该用户的其他好友,使得其他好友能明白该用户已经下线,与用户状态改变的功能是一致的。 用户保持在线的激活功能该功能表示用户和服务器在一定的时候内需要进行互相的激活,以便服务器能够准确的知道某个用户还在线。该功能的提出是因为用户可能会非法退出程序,比如非法关机,死机等情况,这个时候客户端软件无法正常的告诉服务器自己的退出请求。服务器将定时给在线用户发送激活消息,在一定时间内用户若没有应答,即做出该用户已经下线的判断,并做出相关的处理。系统用
40、例图:图3.1 系统用例图3.2 文件传输与聊天系统的应用层协议设计以及相关数据结构3.2.1数据包格式定义为了让通信双方遵守一定的规则,必须要定义通信数据包的格式,如图3-2所示为本设计定义的数据包结构。版本号功能号数据内容加密后的长度未加密前的原始数据内容长度要传输的数据内容4个字节4个字节4个字节4个字节长度由前面的字段决定图3.2 数据包结构前面的4个字段构成了数据包头部,后面的为数据内容。换而言之,本设计的每个数据包都由数据包头部和数据内容组成:数据包数据头部+数据内容其中: 版本号版本号为该数据包的版本系统号,这样的设计是便于以后系统的扩展;另一方面也可以判断该数据包是不是合法的数
41、据包,当服务器或者是客户端接收到的数据不是以指定的版本号开头说明该数据包是不是本系统要求的,那么可以一开始就剔除掉,以免后面错误的发生。版本号的长度为4个字节。 功能号功能号用于指定该数据包的用途。每个数据包都具有特定的功能作用,服务器或者是客户端对于接收到数据包就是根据不同的功能号才进行不同处理。也只有通过功能号才可以区分不同的数据包。功能号的长度为4个字节。 数据内容加密后的长度因为本设计的加密系统只是对数据内容进行加密,数据包头部是不会被加密的。该字段指明了原始的数据内容进行加密后的长度,因为加密系统对数据加密后的密文长度可能是改变了的。本字段长度为4个字节。 未加密前的原始数据内容长度
42、本字段4个字节,记录数据内容在未加密之前的长度,和字段配合只用足可以让加密后的数据内容解密还原。 要传输的数据内容该字段的内容在传输前经过了加密,这里讨论未加密前的数据内容格式。不同功能号对应的数据内容也是不一样的。根据功能号定义了不同数据内容的格式,数据内容的定义和功能号是一一对应的,比如若是功能号为a的数据包,那么它的数据内容的结构定义为struct content_a,依次类推。下面介绍所有的数据内容格式,里面出现的数据类型在附录中均有定义。(1) 功能号0功能描述:客户端与服务器之间的激活消息,客户端在登陆成功后就发送该消息;服务器每隔一定的时间就发送该消息给所有在线的用户。宏定义:#
43、define op_active0数据内容定义:struct content_0 char usernummax_usernum;数据内容描述:若该消息由服务器接收,那么usernum表示发送者的号码;若该消息由发送,那么usernum表示接受者的号码。(2) 功能号1功能描述:客户请求注册,发送该消息给服务器。宏定义:#define op_reg_req 1数据内容定义:struct content_1 myinfo myself;数据内容描述:myself为myinfo的结构体类型,里面填充了在注册时需要的各种资料信息。(3) 功能号2功能描述:服务器对客户端注册应答。宏定义:#defin
44、e op_reg_response 2数据内容定义:struct content_2 bool ok; char usernummax_usernum; int errcode;数据内容描述:ok表示注册是否成功。若ok为true表示注册成功且usernum里面存放的是该用户的新号码;若ok为false表示注册失败,errcode里面存放的是错误代码。(4) 功能号3功能描述:客户端发送登陆请求给服务器。宏定义:#define op_login_req3数据内容格式:struct content_3 char usernummax_usernum;char authinfomax_authin
45、fo;数据内容描述:usernum为登陆用户的号码,authinfo为登陆者的认证信息。这点很复杂,为了保证登陆的安全性,登陆的过程是动态处理的,同一个用户每次登陆的authinfo信息都不是相同的,即便密码并没有改变。如何实现登陆的动态性将在后面讨论。(5) 功能号4功能描述:服务器对客户登陆请求的应答宏定义:#define op_login_response4数据内容格式:struct content_4 bool ok;数据内容描述:ok表示登陆是否成功。ok为true表示登陆成功;ok为false表示登陆失败。(6) 功能号5功能描述:客户端请求服务器给一个好友发送一条消息。宏定义:#
46、define op_send_req5数据内容格式:struct content_5 bool online;char friendnummax_usernum;useraddr friendaddr;char mynummax_usernum;char msgcontentmax_buffer;ctime sendtime;数据内容描述:online表示对方是否在线;friendnum为对方好友的号码;friendaddr为对方好友的udp地址(ip地址和端口号);mynum为自己的号码;msgcontent为传输的消息内容;sendtime为消息发送时间。(7) 功能号6功能描述:服务器对
47、客户转发好友信息,对接收者来说这是接收到的消息格式。宏定义:op_send_response数据内容格式:struct content_6 char fromnummax_usernum;char tonummax_usernum;useraddr fromaddr;char msgcontentmax_buffer;ctime sendtime;数据内容描述:fromnum为发送者号码;tonum为接收者号码;fromaddr为发送者的网络地址;msgcontent为要传输的消息内容;sendtime为发送的消息时间。(8) 功能号8功能描述:客户端收到系统发来的系统消息或者服务器向在线发送
48、系统消息宏定义:#define op_recv_system8数据内容格式:struct content_8 char msgcontentmax_buffer;ctime sendtime;数据内容描述:msgcontent为数据的内容;sendtime为发送的时间。(9) 功能号9功能描述:客户端自己的状态改变。宏定义:#define op_state_myself9数据内容格式:struct content_9 char mynummax_usernum;int state;数据内容描述:mynum表示自己的号码;state表示状态改变号码。(10) 功能号10功能描述:服务器向每个客户
49、的好友发送该用户的状态改变信息。宏定义:#define op_state_response 10数据内容格式:struct content_10 char friendnummax_usernum;int state;数据内容描述:friendnum为好友的号码;state为该好友改变的状态号码。 (11) 功能号12功能描述:客户端向服务器发送个人信息修改后的数据。宏定义:#define op_info_modify12数据内容格式:struct content_12 char usernummax_usernum;myinfo myself;数据内容描述:usernum为自己的号码;mys
50、elf为自己修改个人信息后的资料。(12) 功能号13功能描述:服务器对客户的个人信息修改请求应答。宏定义:#define op_modify_response13数据内容格式:struct content_13 bool ok;数据内容描述:ok为true表示个人信息修改成功;ok为false表示个人信息修改失败。(13) 功能号14功能描述:客户端向服务器发送查看好友的信息请求。宏定义:#define op_viewinfo_req14数据内容格式:struct content_14 char friendnummax_usernum;数据内容描述:friendnum为要查看资料的好友的号
51、码。(14) 功能号15功能描述:服务器端对客户端发送的查看好友信息请求应答。宏定义:#define op_viewinfo_response15数据内容格式:struct content_15 friendinfo myfriend;数据内容描述:myfriend为好友信息结构体类型,存放好友的个人资料。(15) 功能号16功能描述:客户端发送查看指定号码的用户给服务器宏定义:#define op_search_one16数据内容格式:struct content_16 char usernummax_usernum;数据内容描述:usernum为要查询的好友的号码。(16) 功能号17功能
52、描述:对于功能号16的请求,当服务器找不到指定的用户号码的时候,返回该应答。宏定义:#define op_search_failed17数据内容格式:struct content_17 ;数据内容描述:该功能号的数据内容为空。即只需要返回头部信息即可。(17) 功能号18功能描述:服务器到到指定的用户,返回该用户的资料。宏定义:#define op_search_one_response18数据内容格式:struct content_18 friendinfo myfriend;数据内容描述:myfriend存放查询到的用户的资料。(18) 功能号19功能描述:客户端请求搜索在线用户。宏定义:
53、#define op_search_online19数据内容格式:struct content_19 char usernummax_usernum;int offset;数据内功描述:usernum为提出搜索请求的用户号码;offset为搜索在线用户的偏移量。(19) 功能号20功能描述:服务器返回客户端搜索在线用户请求的应答。宏定义:#define op_search_online_response20数据内容格式:struct content_20 friendinfo myfriendgroup_number;数据内容描述:myfriend为一个数组,大小为group_number,这
54、也是每次返回的在线好友最大的个数,数组类型是好友信息的结构体。(20) 功能号21功能描述:客户端请求添加好友。宏定义:#define op_addfriend_req21数据内容格式:struct content_21 char friendnummax_usernum;char mynummax_usernum; char authcontentmax_auth_len;数据内容描述:friendnum为对方好友的号码;mynum为自己的号码;authcontent为认证信息,目前默认为空,即不需要验证。(21) 功能号22功能描述:对于功能号21的请求,服务器判断该好友是否允许添加好友,
55、若同意添加好友,应答该消息给添加者。宏定义:#define op_addfriend_response22数据内容格式:struct content_22 simple_friendinfo myfriend;数据内容描述:myfriend存放被添加者的一些相关简单但必备的资料。(22) 功能号23功能描述:当被添加者同意添加好友,服务器除了发送功能号22的消息外,还要发送此消息给被添加者通知他已经有人添加他为好友了。宏定义:#define op_addfriend_inform23数据内容格式:struct content_23simple_friendinfo myfriend;;数据内容描述:myfriend为添加者的个人简单资料。(23) 功能号26功能描述:对于功能号21的请求,当被添加者不同意添加好友的时候,发送该消息给添加者。宏定义:#define op_addfriend_refuse26数据内容格式:struct con
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物业管理服务合作协议书
- 眼科护士治疗操作规范与技能要点
- 安全培训讲师聘用合同及安全技能提升服务
- 海外紧急医疗救援与专业翻译协作协议
- 小红书品牌合作人资质审核及服务质量监管合同
- 美容护肤机构投资与品牌建设合同
- 跨区域品牌专柜委托经营管理合作协议
- 智能早教设备采购及教师数字化教学能力培养合同
- 旅游意外保险理赔处理协议
- 荷塘莲藕种植与农产品品牌推广委托管理协议
- 园林工程施工现场危险源一览表
- 500KV变电站设备、接线特点及保护配置原则
- 第十章-老年人的临终护理课件
- 结构化学大纲
- 康复评定学第三章肌力
- 图形创意(高职艺术设计)PPT完整全套教学课件
- 2023年财会金融-注册会计师-审计(官方)考试历年真题甄选版带答案
- 2023学年完整公开课版粘压阻力
- 十大元帅罗荣桓
- 生态环境材料第三章
- 基于STM32的平衡车系统设计
评论
0/150
提交评论