网络聊天室Word下载.docx
《网络聊天室Word下载.docx》由会员分享,可在线阅读,更多相关《网络聊天室Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
图2-1系统模块结构图
2.3模块设计
1.服务器模块
服务器模块主要完成接收并处理用户登录申请,转发登录用户发送的消息、启动聊天服务、关闭聊天服务和踢开指定用户功能。
该模块应包括三个子功能模块:
处理用户登录申请功能、转发用户消息功能、聊天室管理功能。
模块功能树如图2-2所示。
图2-2服务器模块功能树图
2.客户端模块
客户端模块为用户提供聊天室操作界面,用户通过客户端可以发送消息给全部或指定的其他用户,可以看到聊天内容,可以看到聊天室内有哪些用户在线。
客户端模块功能树如图2-3所示。
图2-3客户端模块功能树图
2.4系统流程描述
系统主体的处理流程如图2-4所示。
图2-4系统主体处理流程图
系统客户端和服务器的主体处理流程如图2-5和图2-6所示。
图2-5客户端处理流程图
图2-6服务器处理流程图
2.5界面设计
界面设计应遵循简洁美观、方便易用的基本原则。
1.服务器界面设计
具体服务器界面设计效果图如图2-7所示。
图2-7服务器界面设计效果图
2.客户端界面设计
登录界面设计效果图如图2-8所示,客户端主体界面设计效果图如图2-9所示。
图2-8客户端登录界面设计效果图
图2-9客户端界面设计效果图
3详细设计
基于系统需求分析与系统总体设计的结论,本系统采用Delphi7实现各模块的功能,下面按照模块的划分来分别阐述系统的详细设计和实现过程。
3.1服务器模块
1.功能描述
接收并处理客户端的登录请求,并根据客户端的聊天请求向指定客户端转发聊天内容,同时提供聊天室用户管理和服务管理功能。
2.IPO图
输入:
客户端请求消息
处理:
①启动服务器服务;
②等待接收客户端请求;
③根据客户端请求类型,做不同处理;
④将处理结果发送给客户端。
输出:
发给客户端的应答消息
3.函数/过程设计
过程1:
startClick()
声明:
procedureTdmMain.startClick(Sender:
TObject);
功能:
启动服务器的聊天服务。
IPO图:
无
①判断服务器服务进程状态,如果服务已经启动则过程结束,否则进入下一步;
②设置服务器服务进程的Socket端口号为2345;
③启动服务器服务进程;
④在界面显示服务启动提示信息。
服务器启动信息
程序清单:
begin
ifServerSocket_Chat.Active=falsethen
begin
//设置服务器服务进程的Socket端口号
ServerSocket_Chat.Port:
=2345;
//启动服务器服务进程
ServerSocket_Chat.Active:
=true;
//在界面显示服务启动提示信息
ServerStatus.Lines.add(datetostr(date)+'
'
+timetostr(time)+'
:
'
+'
服务启动'
);
end
end;
过程2:
stopClick()
procedureTdmMain.stopClick(Sender:
关闭聊天室聊天服务。
无。
①判断服务器服务进程状态,如果服务已经关闭则过程结束,否则进入下一步;
②关闭服务器服务进程;
③在界面显示服务关闭提示信息。
聊天室关闭信息
ifServerSocket_Chat.Active=truethen
//关闭服务器服务进程
=false;
//在界面显示服务关闭提示信息
关闭'
过程3:
ServerSocket_ChatClientRead()
procedureTdmMain.ServerSocket_ChatClientRead(Sender:
TObject;
Socket:
TCustomWinSocket);
接收并处理客户端请求。
无
①获取客户端发送的请求消息;
②解析请求消息;
③根据请求消息类型做不同的应答处理。
各项游戏初始化数据。
varstrReceive,strCom,strContent,strNick,strFriend:
string;
n,i:
integer;
newItem:
TListItem;
//获取客户端发送的请求消息
strReceive:
=Socket.ReceiveText;
//解析请求消息
n:
=pos('
~'
strReceive);
ifn>
0then
//获取请求指令类型
strCom:
=copy(strReceive,1,n-1);
//处理客户端的广播聊天请求
ifstrCom='
public'
then//public~content
//获取聊天内容
strContent:
=copy(strReceive,n+1,length(strReceive)-n);
//构造消息应答,并将应答消息发送给所有在线客户端
fori:
=0toServerSocket_Chat.Socket.ActiveConnections-1do
ServerSocket_Chat.Socket.Connections[i]
.SendText('
talk~'
+strContent);
end;
//处理客户端的私聊请求
private'
then//private~nick~nick~content
//获取请求内容
//获取消息发送者昵称
strNick:
=copy(strContent,1,pos('
strContent)-1);
=copy(strContent,pos('
strContent)+1
length(strContent)-pos('
strContent));
//获取消息接收者昵称
strFriend:
//获取消息内容
//构造消息应答,并将应答消息发送给消息接收者
ifUserList.Items.Item[i].Caption=strFriendthen
//处理客户端的登录服务器请求
request'
then//request~nick
//获取登录用户昵称
//检查是否存在重名用户,如果有则返回错误应答消息
=0toUserList.Items.Count-1do
ifUserList.Items.Item[i].Caption=strNickthen
ServerSocket_Chat.Socket.Connections[UserList.Items.Count]
err~'
+strNick);
exit;
//将登录用户添加到在线用户列表
newitem:
=UserList.Items.insert(UserList.Items.count);
newitem.caption:
=strNick;
newitem.SubItems.Add(socket.RemoteAddress);
newitem.SubItems.Add(socket.RemoteHost);
AllUserList:
=AllUserList+'
+strNick;
//向所有在线用户广播用户登录消息
add'
+AllUserList+'
过程4:
ServerSocket_ChatClientDisconnect();
procedureTdmMain.ServerSocket_ChatClientDisconnect(Sender:
处理用户离开情况。
①在用户列表中删除离开用户;
②重新构造在线用户名单;
③向所有在线用户广播用户离开指令和在线用户名单。
vari:
isDel:
boolean;
//清空在线用户名单
='
;
//在用户列表中删除离开用户
=0toUserList.Items.count-1do
ifnotisDelthen
ifsocket.RemoteAddress=UserList.Items[i]
.subitems[0]then
=UserList.Items[i].caption;
UserList.Items.Item[i].Delete();
//重新构造在线用户名单
+UserList.Items[i].caption;
//向所有在线用户广播用户离开指令和在线用户名单
del~'
+strNick+AllUserList+'
过程5:
KickClick()
procedureTdmMain.KickClick(Sender:
将管理员指定用户从聊天室中踢开。
①判断当前是否选中需要踢开的用户;
②如果有选中的用户,将选中用户的Socket连接关闭;
//判断当前是否选中需要踢开的用户
ifUserList.ItemIndex>
=0then
//将选中用户的Socket连接关闭
ServerSocket_Chat.Socket.Connections[UserList.ItemIndex].Close;
3.2客户端模块
为聊天用户提供聊天操作界面,主要是向服务器发送聊天请求,并根据服务器的应答进行不同的处理。
用户操作
①登录聊天室服务器;
②根据聊天要求构造请求消息,并向服务器发送;
③解析服务器的应答消息,并进行相应处理。
提示消息和聊天内容
bnt_loginClick()
procedureTMainForm.bnt_loginClick(Sender:
登录聊天室服务器。
①启动登录窗口,等待用户输入服务器IP地址和用户昵称;
②初始化Socket通讯配置;
③建立Socket连接。
//创建并显示登录窗口
iflogin=nilthen
login:
=TLogin.Create(nil);
login.ShowModal;
//当用户选择登录后,根据用户设置的服务器IP地址和昵称登录服务器
iflogin.isOkthen
//设置聊天室服务器服务的Socket端口号
clientsocket1.Port:
//设置聊天室服务器服务的IP地址
clientsocket1.host:
=login.Edit1.Text;
//建立Socket连接
clientsocket1.active:
MyName:
=login.Edit2.Text
ClientSocket1Connect()
procedureTMainForm.ClientSocket1Connect(Sender:
Socket:
向聊天室服务器发送登录请求。
①向聊天室服务器发送登录请求;
②等待服务器应答。
登录请求消息
//向聊天室服务器发送登录请求
clientsocket1.Socket.SendText('
request~'
+MyName);
ClientSocket1Read()
procedureTMainForm.ClientSocket1Read(Sender:
Socket:
接收服务器应答消息,并进行处理。
应答消息
①获取服务器应答消息;
②解析应答消息;
③根据应答消息类型进行处理。
varstrReceive,strCom,strContent,strUser:
//获取服务器应答消息
=socket.ReceiveText;
//解析应答消息
=copy(strReceive,1,pos('
strReceive)-1);
strUser:
//根据应答消息类型进行处理
//应答消息为新用户进入聊天室
then
//重新构造用户列表
UserList.Clear;
UserList.Items.Add('
大家'
UserList.ItemIndex:
=0;
=copy(strReceive,pos('
strReceive)+1
length(strReceive)-pos('
strReceive));
repeat
=copy(strContent,1,pos('
UserList.Items.Add(strUser);
untilstrContent='
//更新聊天室聊天内容
Chat_Content.Lines.Add(UserList.Items
.Strings[UserList.Items.count-1]+'
进来了,大家欢迎!
//应答消息为用户离开聊天室
del'
//更新聊天室用户列表
//更新聊天室内容
Chat_Content.Lines.Add(strUser+'
离开了...'
//应答消息为聊天内容
talk'
//更新聊天室内容显示
Chat_Content.Lines.Add(strContent);
//应答消息为登录错误
err'
//提示用户错误
showmessage('
<
+strContent+'
>
这个昵称已经存在,请换一个登录!
=inputbox('
重新输入'
'
请输入昵称'
大力水手'
untiltrim(strUser)<
//重新发送登录请求
+strUser);
sendClick()
procedureTMainForm.sendClick(Sender:
向聊天室服务器发送聊天内容转发请求。
聊天内容
①检查发送消息内容是否为空;
②根据用户选择的聊天对象,向聊天室服务器发送广播请求;
③如