- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于P2P的IM聊天工具设计
MyQQ2007—基于P2P的IM聊天工具
摘要.2 设计目标
本程序涵盖了IM聊天工具的整体结构、基本功能以及数据库结构。内容包括:用户信息的存储、网页的用户的号码申请用户管理,服务器的运行,客户端的用户登录、聊天和对用户信息进行查询和修改。本软件的开发基本满足的了用户的需求,使其能够通过互联网结交网友,进行点对点聊天,畅享互联网带来的无限乐趣。
软件主要实现以下功能:
具有数据库功能,实现用户信息的存储;
网站支持,用于MyQQ号码的申请注册和管理员对注册用户和群信息的管理;
远程服务器,完成对客户的登录和注销的控制以及聊天信息的数据交换工作;
客户端程序,用户聊天的主程序,用户登录程序后通过同其他用户进行群聊和私聊两种模式认识和结交更过的网友,具有修改个人信息和查询他人信息的功能。
总体设计
2.1数据库设计
本系统需要通过数据库来存储用户的相关信息,主要的表有:MyQQ表和Admin表。MyQQ用来存储用户信息,Admin表则是用来存储管理员信息。
2.1.1 MyQQ表
MyQQ表用来存储用户信息,这个表共有20个字段,id(序号)、Number(MyQQ号码)等字段的数据类型为整型,其中id字段为主键,其值唯一;Password(密码)、Name(昵称)等字段的数据类型为varchar类型,允许用户输入指定长度内的任意长字符串,其中Password字段存储的数据是经过MD5加密算法加密并截取指定长度的字符串,其优点在于使数据库更为安全可靠;其他已知长度字符串类型的数据字段的数据类型定义为char类型,如Sex(性别)、Face(头像)等。
2.1.2 Admin表
Admin表用来存储管理员信息,只有3个字段。其中ID字段的数据类型为整型,且为主键,其值唯一;Name(管理员名称)和Password(密码)字段的数据类型均为varchar类型;Password字段存储的数据也是经过MD5加密算法加密和截取指定长度的字符串。
2.2 程序模块设计
2.2.1 注册申请模块
用户登录网站的号码申请页面(Apply.aspx),同意条款声明、认真填写个人信息和正确填写系统自动生成的验证码,点击“确定”;
系统将用户注册信息连同进行加密算法处理的密码存入数据库中的相应字段中;
最后,系统会自动分配一个8位的MyQQ号码给用户,完成注册。
2.2.2 服务器管理模块
管理员运行服务器端程序;
服务器端开始监听端口,接受用户登录数据;
服务器完成对用户聊天信息的数据交换任务;
管理员通过登录后台可以对用户信息进行管理和维护。
2.2.3 用户登录模块
用户运行客户端程序,通过已申请的MyQQ号码和正确的密码登录远程服务器;
客户端将用户登录信息发送给服务端,此时处于等待状态;远程服务器程序通过访问远程数据库与接收到的数据进行对比,将结果返回给客户端;客户端接收到正确信息后进入主程序,反之错误返回登录界面,等待用户再次登录。
2.2.4 聊天主模块
用户进行聊天的主界面,尽情享受网络聊天交友的乐趣;
用户通过右键相应的用户,在弹出菜单中选择“详细资料”来查询好友信息;
用户也可以在菜单选项中点选“个人设置”修改个人资料和密码等。
部分功能模块的详细设计与介绍
3.1 服务器管理模块
管理员打开服务器端,等待远程用户登录。服务器运行界面用了ListBox控件,可方便管理员直观地了解到当前在线用户情况。
监听端口、数据交换主函数部分代码及注释如下:
while (keepalive)//判断客户端程序是否保持在线状态
{
Byte[] buffer = new Byte[1024];//定义buffer为数据流,用于接收客户端传送的数据
client.Receive(buffer);//接收数据
string clientcommand = System.Text.Encoding.ASCII.GetString(buffer); //将数据转换为ASCII码
string[] tokens = clientcommand.Split(new Char[]{|});//根据数据中的|符号将数据流分解
Console.WriteLine(clientcommand);//重新写入clientcommand
if (tokens[0] == CONN)//判断第一部分是否为CONN
{
for(int n=0; nclients.Count; n++)//将列表元素逐个发送给客户端
{
Client cl = (Client)clients[n];
SendToClient(cl, JOIN| + tokens[1]); }
EndPoint ep = client.
文档评论(0)