简单的UDP聊天工具概要设计说明书_第1页
简单的UDP聊天工具概要设计说明书_第2页
简单的UDP聊天工具概要设计说明书_第3页
简单的UDP聊天工具概要设计说明书_第4页
简单的UDP聊天工具概要设计说明书_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、简单的UDP聊天工具概要设计说明书1、任务概述11 项目命名基于UDP协议的简单的网络聊天工具12 目标编写一个基于UDP协议的简单的网络聊天工具(以下简称网聊1.0),主要用于实验目的,暂不考虑实用性,聊天程序既是客户端,可以链接到远程主机,同时又是UDP服务器,可以响应计算机的链接要求,而且增加一个服务器,提供注册和监控的功能。13 运行环境Windows2000操作系统14 需求概述网聊1.0需实现1、聊天双方限于文字的聊天模式;2、实现多方聊天;3、实时监控其他聊天对象的在线状态。15 条件与限制考虑到UDP协议的不可靠性,建议在运行稳定的局域网内运行。16 开发工具Delphi7.0

2、 profesionalAccessXP16 参考资料Delphi7.0网络应用开发,电子工业出版社,2003.1Delphi4.0编程技术内幕,机械工业出版社,2002.12、总体设计21 处理流程(见图1、图2)22 功能模块及接口设计客户端【登录】【主界面】【设置】【通讯模板】服务器端【用户登录注册】【与客户端通讯】【定时扫描】【远程数据模板】一、客户端【通讯数据包格式】 /通信数据包格式 TMsgForServer = record MsgType:string50;/信息包类型信息 CustomerID:string50;/用户ID CustomerIP:string50;/用户IP

3、 port:string50;端口号 Key:string50; /密码 NickName:string50;/别名 end;【单元文件】1、Login.pas(登录单元关键声明)TLoginFrm = class(TForm) private procedure ShowMainform; procedure Logincheck; procedure OpenConfigform(parameter:string); public ReceiveInfor:TMsgForServer; procedure setLocal0; procedure SetLocal1;2、configFor

4、m.pas;(设置单元关键声明)TConfigFrm = class(TForm) private procedure ModifyCustomerInforModify;/修改、建立新的用户 procedure ConfigNetSetting; procedure AddFriend; public configReceiveInfor:TMsgForServer;3、ClientForm.pas(主窗口单元关键声明) TClientFrm = class(TForm) public DownloadInfor:TMsgForServer; procedure SendMsg; proce

5、dure RefreshFriendsList; procedure RefreshChatFriend; procedure ReFreshLocalInfor;/更新ClientFrm窗口中状态条上本地信息 procedure AddNewFriend(MsgForServer:TMsgForServer);4、CommunicationModul.pas(通讯单元关键声明) TCommunicationModulFrm = class(TForm) IdUDPClientForServer1: TIdUDPClient; procedure FormCreate(Sender: TObj

6、ect); procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); private Private declarations public procedure SetLocal; procedure SetRemoteServer; /*与登录相关的函数* function refreshServerCustomerInfor(MsgForServer:TMsgForServer):boolean; function LoginServer(MsgForServer:T

7、MsgForServer):boolean; /*发送聊天信息给好友* procedure SendMsgToOther(MsgForServer:TMsgForServer); /*刷新好友状态信息* procedure RefreshfriendStatus(MsgForServer:TMsgForServer); /*更新好友信息* procedure RefreshFriendInfor(MsgForServer:TMsgForServer); constRECIEVETIMEOUT=5000;二、服务器端【通讯数据包格式】 TMsgForServer = recordMsgType:

8、string50;/信息包类型信息CustomerID:string50;/用户ID CustomerIP:string50;/用户IP port:string50; Key:string50; /密码 NickName:string50;/别名 end;【单元文件】1、ServerForm.pas(服务器主文件关键声明) TServerUDPFrm = class(TForm) IdUDPClient1: TIdUDPClient; IdUDPServer1: TIdUDPServer; procedure Timer1Timer(Sender: TObject); procedure Id

9、UDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); private /ServerIP:string;/* /打开数据库,SqlFile是指所要打开的查询文本文件 function OpenDataBase(ADOQuery:TADOQuery;Sql):boolean;/* /扫描数据库,查询用户状态,并分两种情况来修改用户状态: /*数据集:ServerQueryADOQuery1 /*SQL文件:QueryCustomstatus.SQL /*第一种情况:检查用户是否在线,如果不在线

10、,发“离线”的信息给该用户的所有 /*朋友。 /*第二种情况:用户在线的情况(分两步): /*第一步:发送hello信息包给每个在线用户 /*第二步:将在线状态改为“离线”: procedure ScanDataBase;/* /查找指定用户的所有朋友。 /*数据集:ServerQueryFriendADOQuery1 /*SQL文件:QueryCustomerFriends.sql /*并且将MsgInfor数据包传递给了SendMsgToCustomer函数 procedure QueryFriends(msgforserver:TMsgForServer);/* /发送信息包给指定IP和

11、端口的目标主机,TMsgInfor类型见上端声明: /*MsgInfor变量的Msg部分只包括:在线,离线,hello三种信息。 procedure SendMsgToCustomer(MsgForServer:TMsgForServer);/* /用户登录确认 /*数据集:ServerQueryADOQuery1 /*SQL文件:CustomConfirmQuery.SQL /*如果登录确认,返回true,同时设置用户数据表中status为“在线”,否则返回false; function CustomerLoginConfirm(MsgForServer:TMsgForServer):boo

12、lean;/* /修改用户信息 /*数据集:ServerQueryADOQuery1 /*SQL文件:ModifyCustomerInforQuery.SQLs /*如果修改成功,返回true,否则返回false; function ModifyCustomerInfor(MsgForServer:TMsgForServer; CustomerIP:string;customerPort:string):boolean;/* /用户注册信息 /*数据集:ServerQueryADOQuery1 /*SQL文件:CustomerInfor.SQL /*如果注册成功,返回true,否则返回fals

13、e; function CustomerRegister(MsgForServer:TMsgForServer; CustomerIP:string;customerPort:string):boolean;/* /修改用户状态信息 /*数据集:ServerQueryADOQuery1 /*SQL文件:ModifyCustomerInforQuery.sql procedure ModifyCustomerStatus(MsgForServer:TMsgForServer);/* /修改friendslist表的信息(添加好友) /*数据集:ServerQueryADOQuery1 /*SQL

14、文件:AddFriendInfor.sql procedure AddFriendInfor(MsgForServer:TMsgForServer);/* /下载好友信息 procedure downLoadFirendInfor(MsgForServer:TMsgForServer); /添加好友信息到自己和好友机器中 procedure ClientAddFriendInfor(MsgForServer:TMsgForServer); public intervalTime:Cardinal; end; constRECIEVETIMEOUT=5000;2、ServerDataModul.

15、pas(数据模块关键声明) TDataModule1 = class(TDataModule) ServerQueryADOConnection1: TADOConnection; ServerQueryADOQuery1: TADOQuery; ADOQuery1: TADOQuery; CustomerADOConnection1: TADOConnection; ServerQueryfriendADOQuery1: TADOQuery; ServerQueryFriendsADOConnection1: TADOConnection; ADOQuery2: TADOQuery; ADO

16、Connection1: TADOConnection; procedure DataModuleCreate(Sender: TObject); private Private declarations public procedure SetLocal; procedure refreshdatabase; end;23 接口设计 用户界面:图1 登陆界面图2 个人设置图3 添加好友窗口图4 网络设置图5 主界面图6 服务器窗口启动注册注册通讯模块初始化1、设置IdUDPClientForServer Host和Port;2、设置IdUDPServer的DefaultPort,并将Acti

17、ve 设为true,开始监听来自其他主机的信息包。Config.ini网络设置启动登录启动程序启动登录:1、执行LoginCheck方法(将写有请求登录的数据包传给Server)监听IdUDPServer的接收端口1、监听传来的信息包的MsgType是否为为登录成功或登录失败,1.1如果为登录成功,告知用户,改写LoginFrm上的其他控件设置,1.1如果为登录失败,告知用户。YNYYNY登录成功主界面初始化:1、更新本地信息,2、发送下载朋友列表信息包给Server,监听IdUDPServer的接收端口1、监听传来的信息包的MsgType:1.1如果为下载信息,更新主窗口的朋友列表:Clie

18、ntFrm.AddNewFriend(MsgForServer);1.2如果是下载完毕,则刷新主窗口:ClientFrm.RefreshChatFriend;1.3如果是添加好友,则更新主窗口的朋友列表:ClientFrm.AddNewFriend(MsgForServer);1.4如果是Chat聊信,则将聊天内容显示在主窗口上,1.5如果是在线,则更新好友列表的好友信息:RefreshFriendStatus(MsgForServer);1.6如果是离线,则更新好友列表的好友信息:RefreshFriendStatus(MsgForServer);1.7如果是ServerHello,则回复在

19、线信息包:RefreshServerCustomerInfor(MsgForServer);NYY添加好友Y进入聊天监听IdUDPServer的接收端口1、监听传来的信息包的MsgType是否为为添加好友成功或添加好友失败,1.1如果为添加好友成功,告知用户,更新本地朋友列表,1.2如果为添加好友失败,告知用户。YNY退出启动注册:1、执行LoginFrm.OpenConfigForm('个人设置');2、TConfigFrm.ModifyCustomerInfor(输入个人设置,调用CommunicationModulFrm.refreshServerCustomerInfo

20、r(MsgForServer)将MsgForServer信息包发给服务器);监听IdUDPServer的接收端口1、监听传来的信息包的MsgType是否为为注册成功或注册失败,1.1如果为注册成功,告知用户1.2、如果注册失败,还原Configfrm上其他控件设置。添加好友:1、传送添加好友信息包给Server图1 客户端程序流程图数据库和通讯模块初始化1、初始化数据库,2、设置IdUDPServer的DefaultPort,并将Active 设为true,开始监听来自其他主机的信息包。Config.ini启动服务器监听IdUDPServer的接收端口1、 监听客户端传来的信息包的MsgTyp

21、e:1.1 如果为请求注册,先检查该用户是否已注册:CustomerLoginConfirm(MsgForServer);如果没有注册,则调用注册函数:CustomerRegister(MsgForServer,ABinding.peerIP,MsgForServer.port) 如果注册成功,发送“注册成功”信息包给该注册用户,如果注册失败,发送“注册失败”信息包给该注册用户,调用的函数为:SendMsgToCustomer(MsgForServer);1.2 如果为请求登录,调用登录函数:CustomerLoginConfirm(MsgForServer);如果登录成功,发送“登录成功”信息包给该用户,并把由Server把线信息包发给该用户的所有朋友:QueryFriends(MsgForServer);如果登录失败,发送“登录失败”信息包给该用户;1.3 如果为请求修改,调用修改函数:ModifyCustomerInfor(MsgForServer,ABinding.peerIp,MsgForServer.port);如果修改成功,发送“修改成功”信息包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论