基于C#的简易局域网聊天系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于C#的简易局域网聊天系统
学校:华南师范大学
系院:物理与电信工程学院
学生姓名:伍先达
学号:20093100161
专业:通信工程
年级:2009级
指导教师:唐小煜
摘要
Socket是TCP/IP协议的编程接口,即利用Soceket的子类TcpListner和TcpClient就可以编程实现一个点对点局域网通信新系统,本文主要介绍用C#语言及和Socket设计即时聊天系统的开发过程和方法。
关键字:C#;;SQL Server ;即时聊天
1绪论
1.1即时聊天系统的发展
随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网或者局域网上即时与好友去的联系已经成为当今社会人们主流的联系方式。
因此出现了QQ、MSN等聊天工具,然后QQ、MSN等聊天工具虽然方便、使用,但是,在许多企业内部由于安全以及这样那样的原因屏蔽了这些聊天工具的使用。
为此,决定开发一个专用于实现局域网内计算机之间即时通信、文件传输的系统,以方便两台计算机之间信息的交流。
1.2C#语言简介
1.2.1C#的背景
C#(念法:C Sharp,音标[∫a:p])是微软公司在2000年6月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相。
C#是微软公司研究员Anders Hejlsberg的研究成果。
C#看起来与Java有着惊人的相似;它包括了诸如单一继承、界面、与Java几乎同样的语法,和编译成中间代码再运行的过程。
但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。
1.2.2C#的特点
如前所述,C#是专门为.NET应用而开发的语言,这从根本上保证了C#与.NET框架的完美结合。
.NET框架为C#提供了一个强大的、易用的、逻辑结构一致的程序设计环境。
在.NET运行库的支持下,.NET框架的各种优点在C#中表现得淋漓尽致。
具体来讲,C#具有如下的特点:
1.语法简洁
2.面向对象设计
3.与Web紧密结合
4.完整的安全性和错误处理
5.版本控制
6.高度兼容性
1.3SQL Server简介
1.3.1SQL Server的背景
SQL Server 是一个全面的、集成的、端到端的数据解决方案,它为组织中的用户提供了一个更安全可靠和更高效的平台用于企业数据和BI 应用。
SQL Server 2005 为IT 专家和信息工作者带来了强大的、熟悉的工具,同时降低了在从移动设备到企业数据系统的多平台上创建、部署、管理和使用企业数据和分析应用程序的复杂性。
1.3.2SQL Server的特点
1.真正的C/S体系结构
2.图形化用户界面,使系统管理和数据库管理更加直观、简单
3.丰富的编程接口工具,为用户进行程序设计提供更大的选择余地
2需求分析
2.1可行性研究
2.1.1可行性分析:
1.经济可行性:由于本系统的主要技术是C#,对自身的经济要求不高,
只需要一台能够运行C#编程软件与SQL Server数据库的电脑便可,经济负担问题基本没有。
2.技术可行性:.NET丰富而又完善的库可以提供强大的支持与保障,保
障了代码的模块化,方面满足用户新需求而对系统进行各种扩展与修改。
而SQL Sever是一个支持多用户的数据库,适用于大中规模的数据量。
3.运行可行性:本系统为一个简易的局域网聊天系统,一般电脑无乱世
硬件上还是软件都能够满足运行条件。
综上所述,本系统的设计与开发在技术上上是可行的,其所需条件都能够满足。
2.1.2功能需求分析:
1.数据库:能够实现基本的简易而又快速地数据存储、修改和读取
2.客户端:能够实现与数据库基本的交互,如修改、添加、读取用户信
息等功能,能够实现与服务器的可靠连接。
3.服务器:能够实现与客户端的可靠连接以及客户端之间通信内容的快
速转发。
2.1.3性能需求分析:
1.安装方便:客户端和服务器的安装快速明了,而数据库只要在一台用
于数据库服务的电脑使用SQL Server打开挂起即可。
2.界面友好:系统窗体数量极少,窗体各控件布置简洁,操作界面十分
友好。
3.二次开发:代码可读性良好,具有模块化,方便再次编辑及使用。
2.1.4运行需求分析
1.运行环境:WINDOWS 98、2000、XP、7皆可。
2.硬件环境:CPU400MHZ以上,内存128MB以上。
2.2数据流图
2.2.1数据流图:
3系统设计
3.1层次设计
3.1.1层次设计图
层次设计图如下所示:
图3-1-1
3.2流程设计
3.2.1客户端协议流程设计
协议流程如图3-2-1所示,验证成功后创建聊天界面时的初始化过程中会启动聊天窗口并创建Socket连接服务器,启动数据收发线程,而在聊天过程中一开始需要使用CONN命令(图中未给出)激活连接,之后便可以选择其他不同的命令(模式)进行发送信息到服务器。
1.CONN命令:用户初次激活连接
2.OK命令:用于显示信息成功发送到服务器
3.ERR命令:用于显示信息发送服务器失败
4.LIST命令:更新用户列表
5.JOIN命令:显示新加入的用户
6.CHAT命令:向所有用户广播信息
7.PRIV命令:向特定用户发送信息
8.QUIT命令:用户离开并提示服务器删除用户
9.EXIT命令:服务器通知特定用户离开
3.2.2服务器协议流程设计
协议流程如图3-2-2所示,服务器启动后设置好需要监听的窗口即可启
动监听并启 动客户数据接收线程,接收到用户信息之后便解释命令分别处理各种信息。
1.CONN 命令:向全部用户发送JOIN 以及向当前用户发送LIST
2.LIST 命令:向当前用户发送在线用户列表
3.CHAT 命令:向所有用户发送信息
4.PRIV 命令:向特定接收用户转发信息
5.QUIT 命令:删除指定用户数据,向全部用户发送EXIT
图3-2-1 客户端协议流程图 图3-2-2服务器协议流程图
4系统实现
4.1数据库注册及验证
4.1.1SQL Server事项
1.验证方式:由于客户端对用户数据的验证过程中必须要对数据库进行
远程登录,故SQL Server的验证方式只能为SQL验证,这样子就涉及一个很关键的东西:该数据的访问权限。
2.访问权限:是由登录名来实现控制的,具体的设置可以使用SQL Server
客户端实现,设置过程为“安全性—>登录名—>新建—>选择SQL验证并创建登录名”,然后在用户映射一栏,如图4-1-1所示,选择需要映射的数据库,由于本人建立的数据库为usrs,故选择usrs。
图4-1-1
分析
体系结构如图4-1-2所示,其中DataProvider为与数据库直接相连的联机对象,DataSet为与数据库无关的断开对象,数据从数据库读出后存在DataSet中。
在该系统中所有与数据库有关的操作都有本人新建的类DBcns来完成。
图4-1-2
1.验证:登陆界面如图4-1-3所示,其中DB服务器IP一栏输入数据服
务器IP地址,DB登录名和DB密码分别输入访问该数据库对应的登录名与密码。
其具体的DBcns类中实现代码分别为:
//重载改变cnsstr的方法
public DBCns(string ip,string uid,string pwd)
{cnsstr = "server="+ip+";database=QQ;uid="+uid+";pwd="+pwd;}
//校验密码的方法,如果密码正常返回true
public Boolean identify(string id, string psw)
{ SqlConnection cns = new SqlConnection(cnsstr);
cns.Open();
//定义账号查询字段
string sqlstr = "select psw from Usr_Table where ID=" + id;
//建立Adapter
SqlDataAdapter sda = new SqlDataAdapter(sqlstr, cns);
//建立并填充进缓冲器ds
DataSet ds = new DataSet();
sda.Fill(ds, "usrtable");
cns.Close();
cns.Dispose();
string sqlpsw = ds.Tables["usrtable"].Rows[0]["psw"].ToString();
//返回比较值
if (psw == sqlpsw)
{return true;}
else
{return false;}
ds.Clear();}
图4-1-3
2.注册:注册界面如图4-1-4所示,其具体的DBcns类中实现代码分别为:
//返回是否有重复ID出现
public bool repeatid(string id)
{
SqlConnection cns = new SqlConnection(cnsstr);
cns.Open();
//定义账号查询字段
string sqlstr = "select psw from Usr_Table where ID=" + id;
//建立Adapter
SqlDataAdapter sda = new SqlDataAdapter(sqlstr, cns);
//建立并填充进缓冲器ds
DataSet ds = new DataSet();
sda.Fill(ds, "usrtable");
cns.Close();
cns.Dispose();
bool repeat = false;
int num = ds.Tables["usrtable"].Rows.Count;
int num2 = ds.Tables["usrtable"].Columns.Count;
for (int i = 0; i < num; i++)
{if (1 < num2)
{if (id == ds.Tables["usrtable"].Rows[i][1].ToString())
{repeat = true;}
else
{repeat = false; }}}
return repeat;
}
//注册新账号,插入新的用户数据
public bool insert(string a, string b, string c, string d)
{ SqlConnection cns = new SqlConnection(cnsstr);
cns.Open();
//定制插入字段
string sqlstr="insert into Usr_Table (ID,psw,Name,Department) values (a,b,c,d)";
//建立cmd
SqlCommand insertcmd=new SqlCommand(sqlstr,cns);
insertcmd.ExecuteNonQuery();
cns.Close();
cns.Dispose();
return true;
}
图4-1-4
4.2Socket编程
4.2.1多线程
Thread类是创建并控制线程,设置其优先级并获取状态最为常用的类。
4.2.2Socket编程原理
Socket是建立在传输层协议上的一种套接字规范,它定义两台主机间进行通信的规范,如果说这两台计算机是利用一个“通道”进行通信,那么这个“通道”的两端就是两个Socket。
Socket屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现Socket规范的主机之间的通信成为可能。
而应用于服务器和客户端的两个类TcpLisner和TcpClient均为Socket的子类。
4.2.3基于C/S的实现过程
1.服务器端实现:如图4-2-1所示,主要线程有:
A.UI主线程,维护服务器界面
B.侦听线程,处理连接请求
C.每个请求的独立处理线程
D.其他配合线程
图4-2-1
2.客户端实现:如图4-2-2所示,在输入服务器端的IP与服务器端所监听的端口之后点击开始,其中在开始使用时应选择模式(Mode)为CONN,然后在发送区(Message)发送用户名,之后便可以选择所需的模式按照规定的格式来进行通信。
|主要线程有:
A.UI主线程
B.数据发送方法
C.数据接收及处理线程
D.其他配合线程
图4-2-2
5结束语
虽然在C#开发环境中使用控件非常方便,但是要真正熟练运用它来实现网络应用程序开发则需要经过较多的操作与训练。
由于理解力以及操作训练时间等各方面的原因,本次设计唯有在部分是完全依靠自身来完成,而网络通信部分则只是停留在能够看懂理解的阶段,故在设计中使用了唐老师的例子。
经过两个多星期的工作,本次设计终于完成了,难免有许多错漏之处,其实如果没有老师的悉心指导,想要完成这个设计是非常困难的。
在这里再次感谢唐老师,感谢唐老师本学期以来的课业教授。
参考文献:
[1]金华,华进.C#网络编程技术教程[M].人民邮电出版社
[2]李现凡,高建荣.基于Socket编程接口的局域网即时通信系统的开发实现[J].常州轻工职业技术学院学报,2006.4:14-18。