




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生毕业设计(论文)QQ聊天系统的设计与实现摘 要QQ聊天软件自从出现起就迅速在网民中普及开来,由于其具有实时性、免费、效率高、功能强等优点而受到广泛的应用。仿照QQ的功能,自行设计并实现一个能够处理多用户进行即时通信的软件具有十分重要的意义。聊天软件的底层都是通过Socket套接字进行实现的,Socket编程在.NET平台上非常方便。使用.NET框架提供的SOCKET编程接口,可以比较容易地编写一个TCP/IP聊天通信程序。可以使信息能够在INTERNET上可靠地进行传输。本文设计并实现了基于局域网的简单聊天程序,该系统采用C/S模式,底层通信通过SOCKET套接字接口实现。系统分为服务器端和客户端两个部分,使用C#语言开发,数据库采用SQL Server 2000。服务器端负责客户端的登录验证,好友分组信息的发送、聊天信息的转发、好友添加查询等信息的处理等。客户端采用TCP协议实现消息发送与接收,实现了用户登录、分组管理、好友添加、即时聊天等功能。本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何进行基于TCP/IP的通信。关键词: QQ;即时通信;套接字;.NET;TCP协议QQ chat system design and implementationAbstractSince the emergence from the QQ chat software quickly gaining in popularity among netizens, because of its real-time, free, high efficiency, functionality and other advantages and are widely used. Modeled QQ function, to design and implement a multi-user to be able to handle real-time communication software is of great significance. Chat software, the underlying socket is achieved by the Socket, Socket programming. NET platform is very convenient. Use. NET Framework provides SOCKET programming interface, can be relatively easy to write a TCP / IP chat communication program. Can make the information can be transmitted reliably on the INTERNET. This paper designed and implemented based on a simple LAN chat program, the system uses the C/S arctechiture, the underlying communication interface via socket SOCKET. System is divided into server and client in two parts, using the C # language development, the database uses SQL Server 2000. Server is responsible for client logon authentication, friends group sending, forwarding chat messages, add friends and other inquiries and other information processing. Client uses the TCP protocol to send and receive messages, to achieve a user login, group management, add friends, instant chat. This article first discusses the synchronous sockets, asynchronous socket, multi-threaded tasks, etc.; and then explain the client, the server how TCP / IP based communications.Key words: QQ; Instant Message; Socket; .NET; TCP protocol目 录第1章 前言- 1 -1.1开发背景- 1 -1.2国内外研究现状- 1 -1.3研究目标与意义- 2 -1.4研究方法- 2 -第2章 相关技术理论介绍- 3 -2.1.NET开发平台及C.NET开发语言- 3 -2.2TCP协议- 3 -2.2.1TCP/IP网络协议- 3 -2.2.2TCP传输控制协议- 4 -2.3套接字- 4 -2.4流- 5 -2.4.1流的基本概念- 5 -2.4.2.NET中的流- 5 -2.5同步、异步、阻塞和非阻塞- 6 -2.6C/S模型- 6 -2.7即时通信协议- 7 -第3章 系统总体设计- 8 -3.1需求分析- 8 -3.2系统基本架构- 9 -3.3功能概要设计- 9 -3.4数据库设计- 11 -3.4.1数据库概念结构设计- 11 -3.4.2数据库逻辑结构设计- 12 -第4章 详细设计与实现- 14 -4.1通信协议设计- 14 -4.1.1聊天系统的通信协议- 14 -4.1.2服务端XML文件操作- 14 -4.2数据库操作处理- 18 -4.3服务器设计- 21 -4.3.1服务器启动- 22 -4.3.2多线程实现方式- 26 -4.3.3消息发送和文件发送- 26 -4.4客户端设计- 26 -4.4.1用户登录处理- 30 -4.4.2用户分组好友列表获取- 31 -4.4.3在线用户列表获取- 32 -4.4.4好友添加功能实现- 34 -结 束 语- 36 -致 谢- 37 -参 考 文 献- 38 -附录A 译文- 39 -C#的优点- 39 -附录B 外文原文- 42 -Where C# Fits In- 42 -IV本科生毕业设计(论文)第1章 前言1.1 开发背景即时通信是一个终端连往一个即时通信网路的服务。即时通信不同于e-mail在于它的交谈是实时的。大部分的即时通信服务提供了presence awareness的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。最早的即时通信软件是ICQ,ICQ是英文中I seek you的谐音,意思是我找你。四名以色列青年于1996年7月成立Mirabilis公司,并在11月份发布了最初的ICQ版本,在六个月内有85万用户注册使用。目前在国内最为流行的即时通信软件非腾讯QQ莫属,腾讯公司自1998年成立以来,其QQ版本已经升级到了最新的QQ2011版,功能也越来越强大,现在中国几乎每个网民都有一个或多个QQ号码,可以毫不夸张地说,腾讯QQ已经成为人们生活中不可或缺的一部分。1970年代早期,一种更早的即时通信形式是柏拉图系统(PLATO system)。之后在1980年代,UNIX/Linux的交谈实时信息被广泛的使用于工程师与学术界,1990年代即时通信更跨越了因特网交流。1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于因特网的即时通信软件。在ICQ的介绍之后,同时在许多地方有一定数量的即时通信方式发展,且各式的即时通信程序有独立的协议,无法彼此互通。这引导使用者同时执行两个以上的即时通信软件,或者他们可以使用支持多协议的终端软件,如Gaim、Trillian或Jabber。近年来,许多即时通信服务开始提供视讯会议的功能,网络电话(VoIP),与网络会议服务开始整合为兼有影像会议与实时信息的功能。于是,这些媒体的分别变的越来越模糊。1.2 国内外研究现状当今,国际上对网络通信系统研究的较好的公司有,思科,Sun,微软等公司,思科主要研究的是底层的传输;微软,Sun公司研究的是应用层。其中微软公司凭借其在操作系统的垄断地位,为了在网络的发展中取得先机,采用了各种各样的手段。但是,其捆绑的msn,无论从功能上,还是技术上来说,都不算是非常先进的。ICQ几乎是国际上通用的即时通信工具,由于在我国它的应用不是很广,所以,其原理也很少被介绍。msn是微软的产品,同样在国内没什么市场,所以,对其原理,也很少被讨论过。国内在即时通信领域的发展也处于百花齐放,百家争鸣的态势,腾讯公司凭借最早推出的QQ聊天软件占据了国内的大部分市场,处于绝对支配地位。网易泡泡、新浪UC、百度Hi、移动飞信等也紧紧跟上,各有各自的优势。应用层上的网络应用软件目前发展异常的火爆,因为我国有着网络应用的最大的市场,现在国内网络的基础性建设发展迅速,应用软件也层出不穷,其中,在游戏的领域中,网络通信的工作做的不错,如联众游戏平台,还有其他的一些平台,这些平台基本上都是基于VC+的,用的都是Socket通信,但是为了效率,这些平台没有用MFC提供的CSocket类,而是直接用Socket进行通信。所以效率上不错。腾讯公司的即时通信软件QQ,从某中程度上来说,代表了国内最高的水平,所以后起之秀一般都以该软件为模仿对象进行开发设计。1.3 研究目标与意义本课题目标是实现局域网中不同用户之间的即时聊天功能,通过基础的网络SOKET编程,为局域网内部的即时通信提供一个具有自主知识产权的软件系统。1.4 研究方法本系统采用C/S(Client/Server)架构进行设计,使用SQL Server 2000构建数据库,并在.NET环境下使用Visual C#.net语言和SOCKET套接字开发一个基于TCP协议的简单即时通信软件,实现简单的即时聊天,好友管理等功能。第2章 相关技术理论介绍2.1 .NET开发平台及C.NET开发语言.NET框架是Microsoft公司推出的一种全新的开发平台,提供了统一的、面向对象并且可以扩展的编程类库和完善的集成开发环境,大大简化了应用程序的开发过程,并且具有良好的移植性和安全性。微软为了推行.NET战略,特别为.NET平台设计了一种语言C#。C#是由C和C+派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,其综合了Visual basic的高效率和C+的强大功能,然而更多的人感觉C#更类似JAVA。事实上C#融合了大量的JAVA思想,C#是.NET的关键性语言,它是整个.NET平台的基础。与C#相比,.NET所支持的其它语言显然是配角,包括VC+.NET在内。但是微软并没有打算放弃VC+.NET,相反,微软对VC+.NET有着另一番独特的打算,VC+.NET的定位与C#不完全重合,VC+.NET应用范围仍强于C#,这一点无论对微软公司还是软件业应用现状都非常重要。可见+.NET在NET框架中已经退化成了底层的语言了,就像C+之前的标准C语言一样,以后将只有开发底层或桌面程序的程序员使用它。它虽然仍旧强大,但是已经不是主流,而主流就是C#语言。2.2 TCP协议2.2.1 TCP/IP网络协议协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:面向连接的服务和无连接的服务。计算机网络中已经形成的网络体系结构主要有两个:OSI参考模型和TCP/IP参考模型。TCP/IP参考模型是因特网(Internet)的基础。和OSI的7层协议相比,TCP/IP协议只有4个层次。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(Internet Protocol, 网际协议)是网络层最主要的协议;TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。2.2.2 TCP传输控制协议面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。TCP协议就使用这种可靠通信。使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。TCP要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开(passive open)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程序可以将动态端口号作为本地端口使用。服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。随后,客户回复一个ACK,这样就建立了链接。现在可以发送和接收消息了。接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。2.3 套接字套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程API,它最初由伯克利大学为BSD UNIX而创建。BSD套接字在经过修改后被用作Windows环境的编程接口(并且被命名为WinSock)。WinSock API被包装在System.Net.sockets命名空间的.NET类中。Windows Sockets 是一个独立于协议的编程接口,用于编写网络应用程序。套接字的第二层含义表示一个用于在进程间进行通信的终端。在TCP/IP中,每个终端都与一个IP地址和一个端口号绑定。我们必须对流式套接字和数据报套接字这两种类型进行区分。流失套接字用TCP/IP协议来使用面向连接的通信;另一方面,数据报套接字用UDP/IP来使用无连接通信。2.4 流2.4.1 流的基本概念流的概念已经存在很长时间了。流是一个用于传输数据的对象。数据的传输有两个方向:1) 如果数据从外部源传输到程序中,这就是读取流。2) 如果数据从程序传输到外部源,这就是写入流。外部源常常是一个文件,但也不完全都是文件,它还可以是:1) 网络,使用一定的网络协议与网络上其它计算机或终端交换数据。2) 一个指定的管道。3) 一块内存区域。2.4.2 .NET中的流在这些情况中,微软提供了一个.NET基类System.IO.MemoryStream来读写内存数据使用System.Net.Sockets.NetworkStream处理网络数据。读写管道没有相应的流类,但有一个常见的流类System.IO.Stream,如果要编写一个这样的类,可以从这个基类继承。流对外部数据源不做任何假定。外部源还可以是代码中的一个变量,使用流在变量之间传输数据的技术是一个非常有用的技巧,可以在数据类型之间转换。在网络编程中我们经常会使用到网络中的流对象:NetworkStream。它实现了.NET中标准的Stream机制,即可以使用NetworkStream通讯网络套接字用标准的流操作进行网络数据的读写。它提供以下的功能:1) 一个统一的从网络中读取数据的方法2) 与其他的.NET流兼容,这样你可以很容易地移植程序。2.5 同步、异步、阻塞和非阻塞 同步(synchronous):所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。异步(asynchronous):异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。阻塞(Block):指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用StreamReader 类的Readlin ( )方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此Readlin ( )方法将一直挂在调用上,直到读到一些数据,此函数调用才返回非阻塞(Unblock):指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。同样调用StreamReader 类的Readlin ( )方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在Windows网络通信软件开发中,最为常用的方法就是异步非阻塞套接字。平常所说的C/S(客户端/服务器)结构的软件采用的方式就是异步非阻塞模式的。其实在用C进行网络编程中,我们并不需要了解什么同步、异步、阻塞和非阻塞的原理和工作机制,因为在.Net FrameWrok SDK中已经已经把这些机制给封装好了。2.6 C/S模型客户机/服务器模型,又称为Client/Server模型,简称C/S架构。C/S计算技术在信息产业当中占有重要的地位。这种客户机/服务器模型是一种非对称式编程模式。该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分,分别在不同的计算机上运行,通过它们之间的分工合作来实现一个完整的功能。对于这种模式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。 在此“服务器”是指能在网络上提供服务的任何程序。服务器接受网络上的请求,完成服务后将结果返回给申请者。对于简单的服务,把每个请求用一个IP数据报发给服务器,服务器用另一个数据报返回响应。客户机和服务器都是独立的计算机。当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。而那些用于访问服务器资料的计算机则被叫做客户机。严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。采用这种结构的系统目前应用非常广泛。如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。各种网络服务器基本都遵循同样的算法:创建一个端口(Port),接受从网络上来的客户服务请求,完成计算后把结果返回给客户,如此反复。2.7 即时通信协议协议是一系列的步骤,它包括双方或者多方,设计它的目的是要完成一项任务。即时通信协议,参与的双方或者多方是即时通信的实体。协议必须是双方或者多方参与的,一方单独完成的就不算协议。这样在协议动作的过程中,双方必须交换信息,包括控制信息、状态信息等等。这些信息的格式必须是协议参与方同意并且遵循的。好的协议要求清楚,完整,每一步都必须有明确的定义,并且不会引起误解;对每种可能的情况必须规定具体的动作。本系统目的在于实现一个简单的即时通信系统,没有必要采用通用的比较复杂的即时通信协议,因此使用了简单的字符串来规范即时通信的各种网络信息,在网络中传输序列化的字符串信息。第3章 系统总体设计3.1 需求分析该仿QQ即时聊天软件基于TCP/IP协议实现用户间的即时通信。它应该基于C/S架构设计实现,即:应该具有一个服务器端平台和客户端平台。以下分别介绍服务器端和客户端的各自功能需求。1. 服务器端和QQ服务器类似,本程序的服务器端具体负责如下功能:用户登录时身份验证;聊天信息的传送;用户好友分组以及好友信息的上传与下载;此外,还需要能够配置服务器端的运行参数,具体包括服务器IP和端口号设置、服器端数据库连接信息设置等。并且,要求服务器端运行界面简洁大方,易于使用。2. 客户端客户端是聊天功能的承载体,它需要具备如下功能:用户注册,信息可以包括用户昵称、密码、email、性别等,注册完成后系统自动分配QQ号码;用户登录,要求可以保存最近登录号码,用户在下次登录时候可以直接输入密码登录。登录时候可以选择隐身登录或者在线状态,仅用于显示状态。和QQ类似,用户上线需要有弹出消息框提示。登录后可以查找好友、添加好友。查找好友分两种查找方式:根据号码精确查找和根据昵称模糊查询;分组和好友显示,登录后能够正确初始化用户的好友分组和好友列表;可以双击用户头像打开聊天窗口,可以正常进行聊天。其他可以提高用户体验的需求,如一些提示音等。3.2 系统基本架构本聊天系统基于C/S架构。和QQ软件的设计思想类似,为了减轻服务器负担,客户端之间的消息发送接收是采用点对点模式的,也就是说,两个聊天客户端之间的聊天记录发送和接收只是发生在这两个Peer之间的行为,不通过服务器进行中转。服务器一侧只负责用户的登录、好友添加请求处理、在线好友一览信息发送、分组好友资料发送等。因此,本系统的架构图如下图3-1所示:QQ服务器QQ客户端QQ客户端聊天消息发送接收登录、加好友好友一览、分组登录、加好友好友一览、分组数据库图3-1 系统架构图3.3 功能概要设计l 客户端1. 注册:客户端单击注册按钮,在弹出的对话框界面上填写相关信息完成注册。注册成功后系统给出自动生成的QQ号码提示。用户可以用该号码和密码登录。2. 登录:用户在界面上输入QQ号码(8位数字)和密码进行登录,客户端会发送登录信息至服务器进行验证,登录成功后会弹出提示消息框并刷新主界面的好友列表信息。3. 添加好友:查找好友:可以根据QQ号码进行精确查询或者根据昵称进行模糊查找,查询到的好友显示在表格中,每一行最后有一个【加为好友】按钮,单击该按钮即可将该用户添加到我的好友分组中。此处为了简便,省略了添加好友的验证信息。4. 好友分组和聊天:(1) 即时聊天模块:客户端与客户端之间建立线程进行点对点的聊天。(2) 好友分组列表: 用户可以下载好友分组,刷新分组信息等,可以退出程序。(3) 显示用户在线状态,打开聊天窗口可以提示该用户是否在线。(4) 单击用户头像可以最小化聊天窗口到托盘区。l 服务器1. 登录处理:(1) 对登录的账号和密码进行检查,将验证信息以XML形式返回客户端,并在服务器端记录用户上线信息。(2) 好友列表发送:给成功登录的账号发送好友列表及好友上线信息(3) 上线信息发送:给成功登录的账号的好友发送在线信息(包括IP,端口等等信息)2. 添加好友:(1) 对客户端发送的添加好友请求进行处理,插入数据库好友表。并将结果返回客户端。本系统基于TCP/IP的通信中,数据交换使用标准的XML文本格式进行。例如,在线用户列表情况XML字符串如下所示:?xml version=1.0 encoding=UTF-8?root online QQnumber00000000/QQnumber IpEndPoint:2010/IpEndPoint /online/root3.4 数据库设计3.4.1 数据库概念结构设计该仿QQ聊天软件有用户、好友、分组等实体,用户有QQ号码、昵称、EMAIL、密码、性别等数据项;分组有分组名称、分组ID、分组所属用户三个数据项;好友有QQ号码、好友QQ号码、分组ID、好友ID四个数据项。一个用户有多个分组,所以用户和分组之间是1对多的关系;一个分组中有多个好友,所以分组和好友之间是1对多的关系;一个用户可以有多个好友,用户和好友之间也是1对多的关系;它们之间的E-R图如下图3-2所示:用户QQ号昵称密码Email性别头像好友分组好友组名编号所属用户QQ好友QQ组ID编号1n1n1n图3-2 E-R图3.4.2 数据库逻辑结构设计根据上述数据库概念结构设计分析,该聊天系统的后台数据库包含3个表,分别为记录用户信息的UserInf表、记录用户好友信息的FriendList表、记录用户分组信息的GroupInf表。详细逻辑结构设计如下:表3-1 用户信息表UserInf表名:Userinf列名类型主键宽度是否允许为空备注cUserNamecharN10NOT NULL用户昵称cQQNumcharY8NOT NULL用户帐号,系统分配vcEmailvarcharN50NULL用户EMAILirankintN4NULL用户级别vcUserHeadervarcharN50NULL用户头像cSexcharN2NULL用户性别vcQUserPwdvarcharN50NOT NULL用户密码表3-2 用户好友信息表FriendList表名:FriendList列(属性)名类型主键宽度是否允许为空备注cQQNumCharN8NOT NULLQQ号码cFriendNumcharN8NOT NULL好友的QQ号码iGroupIDIntN4NOT NULL用户分组IDiFriendIdIntY4NOT NULL用户好友ID,自增长表3-3 用户好友分组表GroupInf表名:FriendList列(属性)名类型主键宽度是否允许为空备注iGroupIdIntY4NOT NULL分组ID,自增长cGroupNameCharN10NOT NULL分组名称GroupOwnerCharN8NOT NULL所属用户QQ号码第4章 详细设计与实现4.1 通信协议设计4.1.1 聊天系统的通信协议本聊天系统中,通信协议使用简单的字符串序列实现,一共设计7个协议类型,具体协议格式如下表4-1所示:表4-1 聊天系统协议协议格式协议类型协议解释1;uid;pwd用户登录1 表示协议类型是登录uid 代表登录用户的QQ号码pwd 代表登录用户的密码2;uid请求好友分组内容2:协议类型Uid: 需要获取好友列表的QQ号码3;uid发送群组资料3:协议类型Uid: 需要获取好友列表的QQ号码4;uid发送好友查找结果4:协议类型Uid: 需要获取好友列表的QQ号码5;uname;pwd;email;sex;用户注册5:协议类型Uname: 昵称;pwd:密码;email:邮件;sex:性别;6;请求全部在线用户列表6:协议类型7;uid;friendqq添加好友请求7:协议类型Uid: 添加者QQ号码Friendqq:好友QQ号码4.1.2 服务端XML文件操作本系统中客户端和服务器端通信大都是采取XML格式进行。服务器端主要处理的XML文本结构有:好友列表xml文件;好友分组XML文件;服务器端处理逻辑是:首先根据用户请求代码,确定相应的处理类型,然后根据处理类型,在服务器端生成XML临时文件,调用Socket的SendFile方法将文件内容发送到客户端。客户端将文件内容写入客户端对应的QQ号码文件夹下的临时文件中,全部接受完成后,用该文件初始化聊天主窗口。服务器端XML文件处理主要代码如下表4-2所示:表4-2 服务端xml文件操作关键代码namespace qqServerManger / summary / xml数据操作类 / /summary public class XmlOperate private DataSet FriendData; / summary / 生成好友列表xml文件 / /summary / param name=UserNum需要生成列表的用户名/param / returns返回生成的文件路径,-1意味着生成文件失败/returns public string MakeFriendXml(string UserNum) try MakeRootFile(UserNum); FriendData = opDate.GetFriendLsit(UserNum); XmlNode AddHere = null; for (int i = 0; i FriendData.Tables0.Rows.Count; i+) XmlDataDocument temp = new XmlDataDocument(); temp.Load(temp + UserNum.Trim() + .xml); XmlElement friend = temp.CreateElement(friend); XmlElement FriendNumber = temp.CreateElement(FriendNumber); XmlElement FriendName = temp.CreateElement(FriendName); string GroupName = FriendData.Tables0.RowsicGroupName.ToString().Trim(); XmlNodeList AllGroup = temp.SelectSingleNode(root).ChildNodes; foreach (XmlNode node in AllGroup) if (node.AttributesGroupName.Value.Trim() = GroupName) AddHere = node; FriendName.InnerText = FriendData.Tables0.RowsicUserName.ToString().Trim(); FriendNumber.InnerText = FriendData.Tables0.RowsicFriendNum.ToString().Trim(); friend.AppendChild(FriendNumber); friend.AppendChild(FriendName); AddHere.AppendChild(friend); break; temp.Save(temp + UserNum.Trim() + .xml); return (temp + UserNum.Trim() + .xml); catch return (-1); /新增一个在线用户到在线用户xml文件中 public static bool AddOnlineUser(string QQNumber, string IpEndPoint) string XmlUrl = onlineinfonLine.xml; if (!File.Exists(XmlUrl) File.Create(XmlUrl).Close(); StringBuilder add = new StringBuilder(); StreamWriter str = new StreamWriter(XmlUrl); add.Append(?xml version=1.0 encoding=UTF-8?); add.Append(root/root); str.Write(add.ToString(); str.Close(); XmlDataDocument XmlData = new XmlDataDocument(); XmlData.Load(XmlUrl); XmlNode root = XmlData.SelectSingleNode(root); if (!IsThisUserOnline(XmlData, QQNumber,IpEndPoint) XmlElement online = XmlData.CreateElement(online); XmlElement QQnumber = XmlData.CreateElement(QQnumber); XmlElement Ipendpoint = XmlData.CreateElement(IpEndPoint); QQnumber.InnerText = QQNumber; Ipendpoint.InnerText = IpEndPoint; online.AppendChild(QQnumber); online.AppendChild(Ipendpoint); root.AppendChild(online); XmlData.Save(XmlUrl); return (true); /生成xml模板文件 private void MakeRootFile(string uid) StringBuilder FriendInf = new StringBuilder(); StreamWriter temp = new StreamWriter(temp + uid.Trim() + .xml); DataSet FriendData = opDate.GetGroupInfByUserId(uid,1); FriendInf.Append(?xml version=1.0 encoding=UTF-8?); FriendInf.Append(root); if (FriendData = null) FriendInf.Append(FriendGroup GroupName=没有分组/FriendGroup); else for (int i = 0; i FriendData.Tables0.Rows.Count; i+) FriendInf.Append(FriendGroup GroupName=); FriendInf.Append(FriendData.Tables0.RowsicGroupName.ToString().Trim(); FriendInf.Append(/FriendGroup); FriendInf.Append(/root); temp.Write(FriendInf.ToString(); temp.Close(); 4.2 数据库操作处理本系统后台数据库为SQL Server 2000,使用ADO.NET连接数据库,用户注册、登录时身份验证、好友添加等操作都需要在服务器端完成,因此服务器端设计了两个类处理数据库操作,具体如下:1. opDate.cs本类是业务逻辑处理类,封装了服务器端的涉及数据库相关操作,如用户身份验证;好友列表获取;好友分组获取;添加用户;查询用户等功能。2. SqlConnectionTest该类封装了ADO.NET操作,数据库连接字符串在服务器端界面上配置,配置的内容会持久化到服务器端的data/dataconfig.dat文件中,该文件是一个xml格式的文件,其基本内容如下:?xml version=1.0 encoding=UTF-8?rootserverip/ipdatabaseQQ/databaseuidsa/uidpwdsa/pwd/server/rootSqlConnectionTest类读取dataconfig.dat中的数据库连接字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火烧云作业设计
- 2025届邢台市南宫市数学三年级第一学期期末教学质量检测试题含解析
- 水利水电工程未来挑战与机遇试题及答案
- 市政工程考试模拟题库试题及答案
- 冷饮小商店课件
- 2025年工程项目管理的重要试题与答案
- 禁烟与安全教育主题班会
- 简述行政协议的概念与特征
- 2025年经济师考题分析中级经济师试题及答案
- 外派工作经历与能力鉴定证明(5篇)
- 医院建筑设计重点、难点分析及应对措施
- 运用精益管理(TPS)缩短医院门诊患者就诊时间医院品质管理成果汇报
- 环保行业人才培养机制方案
- 专题18 热学-五年(2020-2024)高考物理真题分类汇编(解析版)
- 十二生肖调查报告
- 健身塑形瑜伽学习通超星期末考试答案章节答案2024年
- 2024-2025年辽宁省面试真题
- 2024年高考真题-地理(河北卷) 含答案
- 单位驾驶员劳务派遣投标方案投标文件(技术方案)
- 资本经营-终结性考试-国开(SC)-参考资料
- 2024年浙江省中考科学试卷
评论
0/150
提交评论