基于WebServices简易网络聊天工具的设计与实现

Copyright 朱向洋 Sunsea ALL Right Reserved

一、项目内容

本次课程实现一个类似QQ的网络聊天软件的功能;服务端采用WebServices提供技术支持,客户端采用Windows窗体,为用户提供网络聊天的简单功能。

二、项目目的与要求

       掌握完整项目开发的流程;

掌握LINQto SQL类的使用;

掌握传递二进制文件的Web方法;

掌握Web服务中用户状态的管理;

三、项目环境

在win7系统下VisualStudio 2010专业版和SQL Server2008。

四、设计思路分析(包括需求分析、整体设计思路、概要设计)

需求分析:

1、聊天工具主要为用户服务,所以必须有好友管理模块,包含:添加好友、删除好友(需要自己开发)等;并且还要有好友关系,我是你的好友不一定你也是我的好友,好友关系具有单向性;

2、发送聊天信息;

3、发送文件,这里限制文件大小10KB;

好友部分系统功能图:

群功能部分:

具体功能:

1、用户注册:用户想要登陆系统必须先注册;

2、用户登陆:登陆成功后才能添加好友聊天;

3、添加好友:登陆成功后需要添加其他在线用户为好友,条件是:必须是在线用户、不能已经是好友还要添加;

4、好友验证:当接收到添加好友的请求时,进行选择是否同意。同意则该好友出现在自己的好友列表,拒绝则请求添加好友失败!

5、发送消息:登陆用户必须向自己的好友才能发送信息;

6、发送文件:登陆用户可以向好友发送小于10KB的文件,好友是否接收可以选择;

应用程序架构:

采用C/S结构,服务端采用WebServices作为服务的技术支持,客户端采用WindowsForm实现。

开发工具选择Visual Studio 2010旗舰版,数据库使用SQLServer 2008;

服务端采用两层结构,即DAL和BLL,数据访问层使用LINQto SQL类来实现,大大简化该层的设计工作量;业务逻辑层使用LINQ来操作数据对象;

五、详细设计

1、 数据库设计

(1)、数据库名称为ws_message,包含下述五张表,Users表为最基本表,其他四张表的用户名字段全部是User.Nickna的外键。Group表类似。

(2)User表各字段定义

(3)Friend表各字段定义

(4)Group表各字段定义

(5)GroupMembers表定义,存储群中的好友。

(6)Messages表定义

2、 服务端结构分布

(1)     数据访问层Web.DAL

(2)     业务逻辑层Web.BLL

提供数据库操作方法,业务逻辑层使用LINQ来操作数据对象。

(3)     Web服务端方法调用

3、 客户端方法

 

 

六、系统测试

1、数据库的测试

2、服务端的测试

3、客户端测试(此时清空数据库中所有数据)

好友功能部分:

(1)用户登录窗体,标题显示登录界面ICON

(2)用户注册界面

(3)类似注册zxy用户,添加其他两个账号,分别为zhu、xiang

(4)首先登陆zxy,按Enter键完成登陆

(5)以用户“zxy”为例,登录后的主界面:

窗体介绍:

全部好友:显示当前用户的所有好友,包括在线和离线

在线好友:显示当前用户的在线好友

聊天ing:第一个文本框显示聊天内容,下面一个文本框显示当前输入

所在群:列出当前用户所处的所有群

没选正群:显示选正当前用户所在群中的所有群成员。GroupBox组件Text为选正

的群名称。

刷新按钮:刷新全部好友列表和在线好友列表,另外整个窗体所有列表,每个4S

刷新一次。

删除好友按钮:删除删除全部好友列表中选正的好友。

添加好友按钮:弹出一个会话窗口添加好友,详细见下述添加好友窗口。

加群按钮:弹出一个会话窗口,添加群,前提是知道要添加的群名称

发送文件按钮:支持好友之间传输不大于10K的文件

发送按钮:好友之间聊天和群聊天使用,支持Enter键发送

创建群按钮:弹出创建群窗体

解散群按钮:选正要解散的群,前提自己必须是群主,与之同时删除所有群成员

添加好友到群按钮:在全部好友中选择要添加的好友,在群列表中选正要添加到的

群,实现添加。

删除群成员:选正当前群列表中的要删除的群成员。

(6)接着用其他两个账号登陆,三个账号同时登陆截图

(7)添加好友窗体,按Enter发送添加好友请求到“zhu”用户

(8)“zhu”用户收到添加好友请求,点击是表示同意添加,点击“否”表示拒绝,

注意:此处好友添加是单向添加。

(9)当“zhu”用户同意时,返回添加好友成功窗口,拒绝返回拒绝窗口。

(10)此时在“zxy”用户的聊天窗体中的“全部好友”和“在线好友”列表中都显示了“zhu”这个用户

(11)而在“zhu”用户的窗体中并没有同步添加“zxy”为好友,若想添加,重复上述操作添加。进一步说明添加好友是单向的。

(12)删除好友操作以添加好友为例,同样只支持单向删除

(13)添加“zhu”、“xiang”为好友,但只有“zhu”在线。好友列表显示如下:

(14)好友聊天功能,前提是在在线好友列表中选择好友,定向发送

(15)传送文件功能,选择好友,点击发送文件,弹出选择文件对话框,选择文件发送

(16)提示收到好友发来文件是否接收提示,选择接收,保存。

群功能部分:

(1)“zxy”用户创建群zxyqun1

(2)创建成功,兵选正刚创建的群,下面显示群中的成员,当前只有群主。

(3)点击添加好友到群,前提:选正全部好友中的一个好友和一个自己创建的群。然后群成员列表变成两个用户。

(4)删除群成员:选正群成员列表中的“zhu”点击删除群成员,删除后只剩下“zxy”用户。

(5)“zhu”用户完成加群请求操作,“zxyqun1”群主“zxy”收到加群请求,点击同意完成添加。

(6)“zxyqun1”中再次变成两个成员

(7)把用户“xiang”也添加到该群,实现群聊天功能

(8)解散群操作:自动删除群中所有的成员,然后删除该群,删除zxyqun1,只能群主才能解散。

(9)点击“是”只剩下zxyqun2了:

七、 完成的规定项目部分

1、不能直观查到在线用户,必须到后台数据库才能看到的局限性得到解决。

实现方法是添加两个好友列表,分为在线好友和全部好友。

2、好友添加后就不能删除得到解决。

聊天窗体中删除好友按钮实现将全部好友列表中的选正的好友删除。

3、因为没有在线用户列表,则用户下线后也就看不到在线人数的减少得到解决。

在User表中添加IsOnline字段,bit型,登录成功将IsOnline改为TRUE,当关闭聊天窗体时,在application.exit();前面加一个Offline();函数,将IsOnline字段改为FALSE。

好友聊天的局限性得到近乎完美解决。

八、 群功能添加方法说明

创建群:任何一个在线用户都能创建自己为群主的群。并将群主添加到群成员列表GroupMembers中,IsPass字段的值为TRUE。

解散群:群主可以删除自己的群。其他成员不能删除自己所在的但不是群主的群。解散群时,自动将GroupMembers中的所有群成员删除,再删除群。

添加群功能:群功能部分之前在线用户主动添加群,管理员添加全部好友中选正好友入群,两种添加方法,其中第一种需要群管理员验证,而第二种不需要验证。

删除群成员功能:选正群成员列表中的好友,可以删除,不能删除自己,因为自己是群主,删除了群就没了,若想删除自己,可以直接通过解散群来实现。

群聊天功能部分:实现在线好友聊天功能,不在线的好友,群消息保存在服务端,当群成员上线时,在进行消息推送。

九、项目体会与建议

通过此次试验,初步了解开发完整项目的流程,通过项目真正体会到Web服务到底能做什么,初步接触LINQ to SQL
作为数据访问层,从而减小编写DAL的难度,初步认识动态网站开发的三层结构。

项目做起来并没有想象的那么简单,特别是自己设计的群功能部分,出现了很多问题。代码量和好友部分差不多,但逻辑关系比好友聊天复杂的多。通过不断修改不断完善,成功实现,经过测试,没发现什么异常等特殊情况。

十、项目代码

参考我的资源:基于Web服务简易网络聊天工具的设计与实现

声明:其中包括简单需求分析、简明技术报告、完整源代码和数据库文件。这是亲情大奉送啊,完整资料都在这里,仅供学习参考,O(∩_∩)O~自己偷偷看看就行了,禁止用于商业等其他用途。

基于WebServices简易网络聊天工具的设计与实现的更多相关文章

  1. 基于ARP的网络扫描工具netdiscover

    基于ARP的网络扫描工具netdiscover   ARP是将IP地址转化物理地址的网络协议.通过该协议,可以判断某个IP地址是否被使用,从而发现网络中存活的主机.Kali Linux提供的netdi ...

  2. 基于puppeteer的网络拦截工具flyover

    为什么需要网络拦截工具 通常我们会遇到这样的场景: 线上一个图片有异常,线下修正之后需要发布之前进行测试,有些情况下,QA同学有直接在线上环境测试的需求,只是链接本地资源,通常在windows下有一个 ...

  3. C++开发的基于UDP协议的聊天工具

    项目相关地址 源码:https://github.com/easonjim/UDPChat bug提交:https://github.com/easonjim/UDPChat/issues

  4. 基于Android的简单聊天工具-服务器端

    1.数据库用的mysql,一共有3张表,一张用户表user.一张朋友列表friend和一张消息表message. 1 User table 用户表 uid 主键自动生成 userName 昵称 use ...

  5. Java之简单的聊天工具

    今天整理资料的时候,找出自己几年前刚学Java时做过的一个简易的聊天工具,有服务器也有客户端,能发送文字消息和文件,但是用户上线并未存入数据库,而只是简单的缓存在服务器的一个数组中,所以,只要服务器一 ...

  6. (18)C++项目练习一(功能会不断扩展)--------【聊天工具】

    1.准备使用Qt和C++做一个远程(基于互联网的)聊天工具,需要实现以下功能 (1)多对多聊天功能 (2)文件传输功能 (3)注册.登录功能 (4)加好友.同意好友功能 (5)好友列表.黑名单功能(分 ...

  7. 12、android socket使用demo:网络聊天

    目录: 一.效果图 二.原代码分享 三.代码分析 四.总结 一.效果图如下: 客户端1: 客户端2:           二.原代码分享如下: 1.java代码只有一个 MainActivity.ja ...

  8. Python3 实现简易局域网视频聊天工具

    Python3 实现简易局域网视频聊天工具   1.环境 操作系统为 Ubuntu 16.04 python 3.5opencv-python 3.4.1.15numpy 1.14.5PyAudio ...

  9. 基于VC++的网络扫描器设计与实现

    本文正文其实是自己的毕业论文,现在搬上来有两个原因. 一是之前大学的文档都放在百度网盘上,大概去年的时候百度网盘改版搞得不太稳定,文件夹移动次数一多里边就会有一些文件丢失了,也没有很在意.但前几天看申 ...

随机推荐

  1. c++打印蛇形矩阵

    一个m*n的矩阵里按照下图形式填充,最后形成的矩阵即为蛇形矩阵,下图是m=4, n =5时的蛇形矩阵: 方法一:逐层循环 #include <iostream> using namespa ...

  2. Android 完整开源应用大全,完整开源项目

    (Antox)聊天的  (new) (OpenKeychain)OpenPGP在android上的实现  (new) (Flock)提供同步服务 (OpenFlappyBird)以前火爆的坑爹鸟 (F ...

  3. 如何去掉MapReduce输出的默认分隔符

    我们在用MapReduce做数据处理的时候,经常会遇到将只需要输出键或者值的情况,如context.write(new Text(record), new Text("")),这样 ...

  4. Spring学习二----------IOC及Bean容器

    © 版权声明:本文为博主原创文章,转载请注明出处 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的 ...

  5. 自己动手开发IOC容器

    前两天写简历.写了一句:精通Spring IoC容器.怎么个精通法?还是自己动手写个IOC容器吧. 什么是IoC(Inversion of Control)?什么是DI(Dependency Inje ...

  6. [译]GLUT教程 - 重整子窗体

    Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Reshape Subwindows 重整函数的回调需要处理两 ...

  7. 从分类,排序,top-k多个方面对推荐算法稳定性的评价

    介绍 论文名: "classification, ranking, and top-k stability of recommendation algorithms". 本文讲述比 ...

  8. Sqlserver------SQLServer2008R2中新增用户并设定表的访问权限

    在进行项目对接时,有时候处于系统安全性考虑,我们需要设置数据库的访问权限,这个时候,我们可以新增一个用户,然后设定用户的访问权限,具体步骤如下: 1,  新建登录对象 2,  点击用户映射 3,  操 ...

  9. 滑动窗口计数java实现

    滑动窗口计数有很多使用场景,比如说限流防止系统雪崩.相比计数实现,滑动窗口实现会更加平滑,能自动消除毛刺. 概念上可以参考TCP的滑窗算法,可以看一下这篇文章(http://go12345.iteye ...

  10. XtraBackup全备与增量备份

    一.XtraBackup安装 下载地址:http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/ 安装步骤: ===== ...