ImageVerifierCode 换一换
格式:DOCX , 页数:61 ,大小:1.38MB ,
资源ID:1932785      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1932785.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(仿QQ聊天软件基于局域网TCP蓝精灵聊天软件的实现.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

仿QQ聊天软件基于局域网TCP蓝精灵聊天软件的实现.docx

1、仿QQ聊天软件基于局域网TCP蓝精灵聊天软件的实现西南大学计算机与信息科学学院学年设计报告课程:学年设计题目:蓝精灵聊天软件级、专业:2014级计算机科学与技术专业2班学生姓名:杨XX提交日期:2016年 12月16日内容提要:本次的学年设计课题是基于局域网TCP/IP网络通信的聊天软件的实现。从一定程度上,借鉴了一些其他强大聊天软件的设计开发的基于局域网的聊天软件。本课题设计主要用的知识涉及到计算机网络、数据库编程、C#网络通信编程等等。主要的知识点有:socket套接字、TCP面向连接的网络通信、ISO模型、C/S模型、SQLServer等等。蓝精灵聊天软件实现了在一个局域网内部的客户端之

2、间通过服务器端进行聊天通信功能。也就是说,主要包括两个部分的功能,一个是服务器,一个是客户端。服务器实现了启动监听、响应客户端发来的连接请求、转发从一个客服端接收的消息到另外一个客户端、响应客户端发来的动作请求、关闭监听。客户端实现了用户注册、用户登录、查找并添加好友、删除好友、好友聊天的功能。关键词:SocketTCPClient计算机网络Server SQLServer网络通信 C#编程 C/S模式ISO模型局域网参考书目:C#网络通信程序设计精讲吴晨陈建孝编著清华大学出版社 C#开发宝典王小科李继业等编著机械工业出版社萨师煊 数据库系统概论 高等教育出版社计算机网络原书第6版 James

3、 F.Krouse Keith W.Ross 机械工业出版社成绩评定:指导教师(签字):年月日目录1 概述 12 基本概念和方法、工具 1(1)基本概念 1(2)方法 2(3)开发工具 33 设计方案 3(1)总体设计 3(2)界面设计 4(3)服务器端设计说明 5(4)服务器端设计 5(5)客户端设计 6(6)数据库设计 94 源代码 10(1)服务器端 10(2)客户端 22(3)数据库 345 简要的使用说明 356 总结 407 参考文献 41蓝精灵聊天软件系统1概述即时通信软件为我们提供了诸多的方便,使我们逐步享受信息时代的便捷。我们最熟悉的即时通信软件就是QQ了,因为它几乎已经融入

4、了我们每个人的日常生活。由此可见,生活在信息时代的人们对即时通信、聊天软件有巨大的需求,这样的软件也将为我们节省大量的时间。然而,基于internet的QQ已经深入人心,要想再去做可能没有任何竞争力。此时,我们可以换一个角度,调整用户对象。如今的时代背景下,信息的泄露早已屡见不鲜,尤其是一些大企业的内部信息,如果这些信息泄露,可能会造成巨大的经济损失,甚至将导致企业破产。因此,为了便捷内部人员之间的交流,做这样的一个内部即时通信、聊天软件还是很有市场的。我们的目标就是做的仿QQ的聊天软件蓝精灵,面向内部人员使用的即时通信软件。为了方便内部人员之间便捷的交流,需要开发一款适合内部人员进行即时通信

5、的软件,这样的软件既满足了内部人员之间便捷的交流,同时,也防止内部信息的外流,开发这样一款即时通信软件,是很有必要的。综合以上因素,我们利用C#网络通信编程实现了基于TCP/IP可靠网络通信系统蓝精灵聊天软件。本软件包括两个部分,客户端和服务器。服务器的功能主要是监听客户端发来的连接请求并予以响应、转发客户端的信息、响应客户端执行注册、登录等的操作以及关闭连接。客户端主要是界面,注册、登录、搜索添加好友、删除好友以及与好友聊天的功能实现。2 基本概念和方法、工具(1)基本概念TCP:是一种面向连接的、可靠的、基于字节流的传输层通信协议。套接字:IP地址和目的IP地址以及源端口号和目的端口号的组

6、合,其用于标识客户端请求的服务器和服务。C/S模式:C/S 结构,客户机和服务器结构。局域网:在一个局部的地理范围内(如一个学校、工厂和机关内),将各种计算机、外部设备和数据库等互相联接起来组成的计算机通信网,简称LAN。它可以通过数据通信网或专用数据电路,与远方的局域网、数据库或处理中心相连接,构成一个大范围的信息处理系统。套接字简介:套接字最早是 Unix 的,window 是借鉴过来的。TCP/IP 协议族提供三种套接字:流式、数据报式、原始套接字。其中原始套接字允许对底层协议直接访问,一般用于检验新协议或者新设备问题,很少使用。 套接字编程原理:延续文件作用思想,打开读写关闭的模式(2

7、)方法采用Socket 异步通信方式服务器端:a.主界面:privatevoid btnStart_Click(object sender, EventArgs e);/*点击启动按钮的响应函数*/privatevoid AcceptCallback(IAsyncResult ar);/*异步接收来自客户端的消息*/privatevoid ReceiveCallback(IAsyncResult ar);/*对接收到的消息进行处理*/privatevoid Respond(MyFriend frd, ClassMessage msg);/*服务器对客户端消息的响应函数*/privatevoid

8、 SendData(MyFriend frd, ClassMessage msg);/*发送反馈消息给当前客户端*/privatevoid SendDataTo(MyFriend frd, ClassMessage msg);/*发送聊天信息给在线客户端*/privatevoid btnStop_Click(object sender, EventArgs e);/*点击结束按钮的响应函数*/b.Data控件:publicint LoginExSQL(LoginMsg msg, string remoteEndPoint);/*查询数据库验证登录信息*/publicint RegistExSQ

9、L(ClassMessage msg);/*在数据库插入注册用户信息并返回注册结果*/publicClassMessage GetmymsgExSQL(ClassMessage msg);/*从数据库中获取用户信息*/publicstring GetfriendsExSQL(ClassMessage msg, outint count);/*获取好友ID*/publicSqlDataReader GetfriMsgExSQL(string FriendMsg, int flag);/*从数据库中获取用户的好友信息*/publicint AddFrinedExSQL(ClassMessage m

10、sg);/*将好友相关信息插入数据库Friends表*/publicint DeleteExSQL(ClassMessage msg);/*从Friends表中删除好友相关信息*/客户端:a.登录界面:privatevoid button_register_Click(object sender, EventArgs e);/*注册按钮的点击响应*/privatevoid button_Login_Click(object sender, EventArgs e)/*登录按钮的点击响应*/privatevoid Login_OK()/*登录成功,进入好友列表界面函数*/privatevoid

11、button_Quit_Click(object sender, EventArgs e)/*退出按钮的点击响应*/b.注册界面:privatevoid button_register_Click(object sender, EventArgs e)/*立即注册按钮的点击响应*/privatevoid button_Cancel_Click(object sender, EventArgs e)/*取消按钮的点击响应*/c.好友列表界面:privatevoid FriendList_Load(object sender, EventArgs e)/*好友列表界面主窗体显示*/privatev

12、oid ShowMymsg()/*用户信息初始化及显示*/privatevoid AddFriends(TCPSocket client, ClassMessage msg)/*显示好友列表信息*/privatevoid button_Search_Click(object sender, EventArgs e)/*搜索按钮的点击响应*/privatevoid StartChat()/*进入聊天界面函数*/privatevoid ItemDoubleClick(object sender, MouseEventArgs e)/*双击好友项的响应函数*/privatevoid删除好友ToolS

13、tripMenuItem_Click(object sender, EventArgs e)/*右键菜单选项删除好友点击响应*/privatevoid发起会话ToolStripMenuItem_Click(object sender, EventArgs e)/*右键菜单选项发起会话点击响应*/d.搜索好友界面:public SearchFriends(TextBox textBox_Search, Label label_userName)/*有参构造函数*/privatevoid SearchFriends_Load(object sender, EventArgs e)/*搜索界面主窗体

14、显示*/privatevoid RespondSearch(ClassMessage msg)/*搜索结果处理*/privatevoid pb_SFhead_Click(object sender, EventArgs e)/*头像图片框点击响应函数*/privatevoid btSearch_Click(object sender, EventArgs e)/*搜索按钮的点击响应*/e.好友聊天界面:public Chat(ListViewItem listViewItem, string UserName)/*有参构造函数*/privatevoid Chat_Load(object sen

15、der, EventArgs e)/*聊天界面主窗体显示*/privatevoid Run()/*获取聊天消息进程*/privatevoid button_Close_Click(object sender, EventArgs e)/*关闭按钮的点击响应*/privatevoid button_Send_Click(object sender, EventArgs e)/*发送按钮的点击响应*/privatevoid GetBSmsg(ClassMessage msg)/*聊天消息的处理及显示*/f. TCPSocket控件:publicvoid Connection()/*连接服务器端*/

16、publicClassMessage SendReceive(ClassMessage msg)/*发送信息并接收响应publicvoid SendMsg(ClassMessage msg)/*发送信息*/publicClassMessage ReceiveMsg()/*接收信息*/publicvoid ShutSocket()/*关闭远程连接并释放资源*/(3) 开发工具Visual Studio C#SQL Server3 设计方案(1)总体设计程序设计:服务器客户端信息交互设计:(2)界面设计(3)客户端详细功能结构设计:(4)服务器端设计说明:服务器端主界面,如下所示,为服务器端界面设

17、计的截图,界面主要包括三个部分,分别实现的是显示服务器进行的响应操作、显示服务器响应客户端主机的套接字以及启动监听和关闭监听。当用鼠标单击“启动”是,服务器开始工作,监听。此时若有用户加入到服务器,右边的框将会显示加入用户的IP地址,若是发生了数据交换。左边的框图将会显示交换动态。(5)客户端设计说明:客户端的界面设计较服务器稍微复杂,主要包括注册界面、登录界面、登陆之后的主界面、好友搜索界面以及与好友聊天的界面,以下分别介绍。a.登录界面:登录界面主要实现两个功能。一个是用户登录。一个是当用户还没有注册时,需要注册时,即可点击注册跳转到注册界面。b.注册界面:注册界面需要填写的信息包括姓名、

18、密码、性别以及年龄,以此作为用户的基本信息,其中账户密码是用户登录的依据。通过注册成功的用户,其信息将会被插入到数据表UserInfo中。c.好友列表界面:登录界面中点击登录之后跳转到的界面。好友界面显示的信息有用户头像、用户昵称、用户在线状态、搜索好友文本框和按钮以及我的好友列表。在此界面中单击好友项,鼠标右键,可以弹出两个选项:删除好友和发起会话,点击可实现相应功能。d.搜索好友界面:在主界面中的搜索框内输入要搜索的好友名,点击搜索按钮,就可直接跳转到好友搜索的界面,并在界面显示出搜索的结果。若想直接添加为好友,直接单击好友头像即可添加并返回好友列表界面(此时已加入新好友)。若是想另外搜索

19、好友,可在搜索文本框里输入要搜索的好友名,单击搜索即可。e.好友聊天界面:进入好友聊天界面,直接在下面的文本框内输入想要与好友发送的内容,点击发送即可将消息发送给对方,要求双方同时在线聊天。(6) 数据库设计本程序示通过用ADO来访问数据库,分别用ADO访问了数据库的各个对象及各方法。数据库主要包括两个表:一个用来存储好友信息;一个用来存储用户信息。数据库还要根据客户端的操作及时更新表的内容。表UserInfo:用来存储已注册用户的帐号信息。主要包括昵称、密码、头像、性别、年龄等信息的。表Friends:用来存储我的好友信息。Friends和UserInfo表的关系:4 源代码(1)服务器端a

20、.主界面:/点击启动按钮的响应函数privatevoid btnStart_Click(object sender, EventArgs e)/Start listeningif (IsStart) return;IPAddress ip = IPAddress.Any; /提供一个 IP 地址,指示服务器应侦听所有网络接口上的客户端活动IPEndPoint localep = newIPEndPoint(Dns.Resolve(Dns.GetHostName().AddressList0, 11000);listener = newTcpListener(localep); listener

21、.Start(10);IsStart = true; lstBox1.Invoke(AppendString, string.Format(服务器启动侦听!端点为:0, listener.LocalEndpoint.ToString(); ClientSocket = newSocket256;/接受连接请求的异步调用AsyncCallback callback = newAsyncCallback(AcceptCallback); listener.BeginAcceptSocket(callback, listener); btnStart.Enabled = false;/异步接收来自客

22、户端的消息privatevoid AcceptCallback(IAsyncResult ar)try /完成异步接受连接的请求的异步调用/将接收信息添加到列表中Socket handle = listener.EndAcceptSocket(ar);MyFriend frd = newMyFriend(handle);/保存为此客户建立的连接 ClientSocketClientNum+ = handle; lstBoxStatu.Invoke(Addfriend, frd);AsyncCallback callback;/继续调用异步方法接受连接请求if (IsStart) callbac

23、k = newAsyncCallback(AcceptCallback); listener.BeginAcceptSocket(callback, listener); /开始在异步连接上进行异步的数据接收 frd.ClearBuffer(); callback = newAsyncCallback(ReceiveCallback); frd.socket.BeginReceive(frd.Rcvbuffer, 0, frd.Rcvbuffer.Length, SocketFlags.None, callback, frd);catch IsStart = false; /对接收到的消息进行

24、处理privatevoid ReceiveCallback(IAsyncResult ar)MyFriend frd = (MyFriend)ar.AsyncState;try int i = frd.socket.EndReceive(ar);if (i = 0) lstBoxStatu.Invoke(Removefriend, frd);return; else ClassMessage msg = newClassMessage(); msg = (ClassMessage)newClassSerializers().DeSerializeBinary(newMemoryStream(f

25、rd.Rcvbuffer);string data = string.Format(Form:0, frd.socket.RemoteEndPoint.ToString(); lstBoxStatu.Invoke(AppendString, data);/响应客户端请求 Respond(frd, msg); frd.ClearBuffer();AsyncCallback callback = newAsyncCallback(ReceiveCallback); frd.socket.BeginReceive(frd.Rcvbuffer, 0, frd.Rcvbuffer.Length, Soc

26、ketFlags.None, callback, frd); catch lstBoxStatu.Invoke(Removefriend, frd); /服务器对客户端消息的响应函数privatevoid Respond(MyFriend frd, ClassMessage msg)/根据接收信息给出响应switch (msg.msgCommand) caseMsgCommand.Logining:Data LoginSQL = newData();LoginMsg log_msg = (LoginMsg)newClassSerializers().DeSerializeBinary(newM

27、emoryStream(msg.Data);if (LoginSQL.LoginExSQL(log_msg, frd.socket.RemoteEndPoint.ToString() = 1) msg.msgCommand = MsgCommand.Logined; SendData(frd, msg);break;caseMsgCommand.Registering:Data RegistSQL = newData();if (RegistSQL.RegistExSQL(msg) = 1) msg.msgCommand = MsgCommand.Registered; SendData(fr

28、d, msg);break;caseMsgCommand.Mymsggeting:Data MymsgSQL = newData();/获取并发送用户信息ClassMessage msgG = MymsgSQL.GetmymsgExSQL(msg); msgG.msgCommand = MsgCommand.Mymsggot; SendData(frd, msgG);break;caseMsgCommand.FriendList:Data FriListSQL = newData();int count = 0;SqlDataReader sdr;FriendMsg frimsg = newF

29、riendMsg();string FriendID = FriListSQL.GetfriendsExSQL(msg, out count);for (int i = 0; i count; i+) sdr = FriListSQL.GetfriMsgExSQL(FriendIDi, 0); sdr.Read();if (sdr0 != DBNull.Value) frimsg.Face = (byte)sdr0;else frimsg.Face = null; frimsg.UserName = sdr1.ToString();/发送好友信息给客户端 msg.Data = newClass

30、Serializers().SerializeBinary(frimsg).ToArray(); msg.msgCommand = MsgCommand.FriendList;/获取验证消息 SendData(frd, msg); /通知客户端好友信息已查询完 msg = newClassMessage(); SendData(frd, msg);break;caseMsgCommand.Frimsggeting:Data FriMsgSQL = newData();/获取好友信息并发送SqlDataReader sdr1 = FriMsgSQL.GetfriMsgExSQL(msg.UserName, 1);if(sdr1.Read() if (sdr10 != DBNull.Value) msg.Face = (byte)sdr10;else msg.Face = null; msg.msgCommand = MsgCommand.Frimsggot; SendData(frd, msg);break;caseMsgCommand.UpdateState:Data AddFriSQl = newData();int state = AddFriSQl.AddFrinedExSQL(msg);if (state = 1) msg

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2