局域网聊天系统

本文详细描述了一种基于Windows的局域网聊天工具的开发过程,包括需求分析、系统设计、功能模块划分、服务器架构以及黑盒测试用例。重点介绍了登录、好友管理和聊天功能的实现,以及服务器性能和UI设计的要求。
摘要由CSDN通过智能技术生成

1.引言

1.1 目的

本报告是基于windows的关于记录完成一个局域网聊天工具的报告。

1.2 背景

在互联网+和HTML5时代,随着现代电子产品的发展,人与人之间的交流已经不存在距离和时间上的问题,聊天工具如微信,QQ等已经成为人生活上不可分割的一部分。微信等已经不仅仅最基本的聊天需求,移动支付等功能也是大大方便了人们的需求。

2.需求分析

2.1 序言

制作一个简易的局域网聊天工具,拥有用户注册和管理,好友的添加,在线好友的显示,与在线好友进行聊天的功能,该系统将基于windows平台进行开发。

2.2 项目简介

2.3系统功能

局域网聊天工具的主要功能:1、拥有数据库管理用户的账号密码;2、设计登录界面,用于管理不同的用户登录;3、设计好友列表界面,用户可以直观的检测自己的好友是否在线;4、设计聊天界面,用户可以在此界面与好友进行交流

2.3.1.登录功能

用户输入自己的账号密码进行登录,系统自动和数据库的账号密码进行比对,对不同的用户进行分别管理

2.3.2.好友功能

用户可以在此界面直观的查看自己的好友列表,已经好友是否在线。对于已经上线的好友可以进行聊天。

2.3.3.聊天功能

用户可以在此界面和好友进行信息的发送,好友如果在线可以实时看到接受的信息。

2.4.模块划分

2.4.1.登录模块

用户输入账号密码进行登录操作

2.4.2.好友列表模块

用户可以观测自己的好友列表以及好友的在线情况

2.4.3.聊天模块

界面上方显示当前好友名称,上部分的文本显示框显示用户与好友的聊天信息,下方文本框则为用户准备发出的信息。正下方为发送按钮,将用户预定发出的信息传输给用户好友

2.4.4.服务器模块

局域网架设服务器,将用户与用户的客户端进行连接,以起到聊天的功能实现。

2.5.模块图

图1 局域网聊天工具模块图

2.6流程图

图2局域网聊天工具流程图

2.7.性能要求

作为局域网的聊天系统,应做到消息实时传递成功,内存占用量低,对服务器模块的网络占用低。

3.系统设计

3.1总体设计

图3局域网聊天工具系统设计图

3.2功能设计

1 局域网聊天工具(客户端)功能设计表

主要功能/作用

/函数

继承的类

登录界面设计

RegistFrom.cs

用户好友界面设计

LittleQQ.cs

聊天界面设计

ChatForm.cs

抽象类

AbstractCommand.cs

检测好友上线

FriendOnLine.cs

AbstractCommand.cs

检测好友下线

FriendOFFLine.cs

AbstractCommand.cs

检测好友在线状态

FriendOnLinedata.cs

AbstractCommand.cs

用户好友数据

Friendsdata.cs

AbstractCommand.cs

登陆失败

RegistKeyFalse.cs

AbstractCommand.cs

登录成功

RegistKeyTrue.cs

AbstractCommand.cs

重复登录时

Userexist.cs

AbstractCommand.cs

用户名初始化

UserName.cs

AbstractCommand.cs

聊天界面发送信息

RegistCommand.cs

SendMassageCommand.cs

AbstractCommand.cs

命令工厂,用于调用各个功能

CommandFcatory.cs

底层文件,客户端的架构

SocketOperate.cs

图4局域网聊天工具(客户端)关系调用图

主要功能/作用

/函数

继承的类

服务器管理界面及视窗

Q1.cs

用户管理

User.cs

用户上下线事件处理

MyDictionary.cs

抽象类

AbstractCommand.cs

前端发送数据

ForwardRequest.cs

AbstractCommand.cs

检测好友在线状态

FriendsdataOK.cs

AbstractCommand.cs

获取好友名字

GetName.cs

AbstractCommand.cs

登录日志管理

RegistRequest.cs

AbstractCommand.cs

详细好友数据管理

AccessControl.cs

AbstractCommand.cs

命令工厂,用于调用各个功能

CommandFcatory.cs

底层文件,客户端的架构

SocketOperate.cs

表2 局域网聊天工具(服务器)功能设计表

图5 局域网聊天工具(服务器)关系调用图

4.系统开发

4.1源程序清单

4.1.1 登录模块(客户端)

名称

作用

RegistFrom.cs

登录窗口

RegistButton_Click()

登录按钮功能

ShowMessage()

消息框提示

GetRegistfrom()

获取单例模式的唯一实例

RegistKeyFalse.cs

登录失败(成功)

Userexist.cs

用户重复登陆提示

UserName.cs

获取用户名称

表3登录模块源程序表

4.1.2 好友列表模块(客户端)

名称

作用

LittleQQ.cs

好友列表窗口

ADDFriends()

添加好友

SetFriendOnLine()

设置好友上线

SetFriendOFFLine()

设置好友下线

chanceUserName()

修改用户ID

ChatFormShow()

显示聊天框

GetChatFrom()

获取单例模式的唯一实例

GetParentDirectory()

获取上级文件目录

FriendOFFLine.cs

检测好友上线

FriendOnLine.cs

检测好友下线

FriendOnLinedata.cs

检测好友在线状态

Friendsdata.cs

用户好友数据

表4 聊天模块源程序表

4.1.3 聊天模块(客户端)

名称

作用

ChatForm.cs

聊天窗口

MessageADD()

将输入的信息添加到聊天框中

chanceIP()

更改IP

SendButton_Click()

发送信息按钮

ChatForm_FormClosing()

关闭聊天框

RegistCommand.cs

发送信息

SendMassageCommand.cs

发送信息

表5 登录模块源程序表

4.1.4 服务器模块

名称

作用

Q1.cs

服务器控制界面窗口

Form1_Load()

将输入的信息添加到聊天框中

StarButton_Click()

服务器启动按钮

CheckAlive()

定时执行ClientAlive

ClientAlive()

查询每一个连接是否仍存在

UpdataShow()

更新内容显示

AddUserSignLog()

添加用户登录日志

GetQ1()

User.cs

GetUserList()

用户管理

AbstractCommand.cs

ForwardRequest.cs

获取前端套接字

FriendsdataOK.cs

发送好友在线情况

GetName.cs

获取好友姓名

RegistRequest.cs

详细命令集

AccessControl.cs

getWhoOwnFrien()

获取谁拥有这个好友

getFriendsData()

获取好友的详细数据

getFriends()

获取好友列表

getFriendID()

获取好友ID

keyInspect()

获取ID下的Key

GetIP()

获取ID下的IP地址

UpdateIP()

更新用户ip地址

AddUser()

往数据库中添加新用户

GetUserName()

获取用户ID下的Name

GetParentDirectory()

获取上级文件目录

CommandFcatory.cs

策略工厂

SocketOperate.cs

底层基本架构

Star()

启动侦听

Accept()

侦听到的套接字处理

ReceiveMsg()

接受数据

Getsocket()

返回客户端套接字

表6 服务器模块源程序表

4.1.5 聊天气泡模块

名称

作用

ChatBox.cs

聊天显示窗口

addChatBubble()

添加一个文字聊天气泡

addImgBubble()

添加一个图片聊天气泡

addVoiceBubble()

添加一个语音聊天气泡

ChatBox_profileRightClicked()

ChatBox_Load()

窗口显示加载

chatPanel_Paint()

窗口绘制

CSetLineSpace.cs

气泡内文字行间距

IChatBubble.cs

文字气泡初始化

IImgBubble.cs

图片气泡初始化

IVoiceBubble.cs

声音气泡初始化

LeftChatBubble

显示在聊天框左半边的文字气泡

setText()

文字设置

pictureBox_profile_MouseClick()

鼠标点击事件(显示发送人的ID)

LeftImgBubble

显示在聊天框左半边的图片气泡

setImg()

图片设置

pictureBox_profile_MouseClick()

鼠标点击事件(显示发送人的ID)

LeftVoiceBubble

显示在聊天框左半边的声音气泡

setRecord

音频设置

pictureBox_img_Click

播放音频

pictureBox_profile_MouseClick

鼠标点击事件(显示发送人的ID

RightChatBubble

显示在聊天框右半边的文字气泡

setText()

文字设置

pictureBox_profile_MouseClick()

鼠标点击事件(显示发送人的ID)

RightImgBubble

显示在聊天框右半边的图片气泡

setImg()

图片设置

pictureBox_profile_MouseClick()

鼠标点击事件(显示发送人的ID)

RightVoiceBubble

显示在聊天框右半边的声音气泡

setRecord

音频设置

pictureBox_img_Click

播放音频

pictureBox_profile_MouseClick

鼠标点击事件(显示发送人的ID

表7 聊天气泡模块源程序表

4.2功能实现

4.2.1 UI布局设计

登陆界面设计,如图4所示。

图6登陆界面设计图

好友列表设计,如图5所示。

图7 UI好友列表设计图

聊天窗口设计,如图6所示。

图8 UI聊天窗口设计图

服务器窗口设计,如图7所示。

图9 UI服务器窗口设计图

聊天窗口气泡设计(以下图片基于单独测试),如图8,9所示。

图10 UI聊天窗口气泡设计图

图11 UI聊天窗口气泡设计图

4.2.2 消息发送

文件名

内容

RegistCommand.cs

namespace Client.SendCommand

{

    //登录命令数据报为:registRequest/IPEndPoint(用户自身端口)/用户ID/用户密码

    class RegistCommand : AbstractCommand

    {

        //重载父类方法(实现登录功能)

        public override void Operate(string Txt)

        {

            //发送数据

            try

            {

                //给文本附加命令

                Txt = "registRequest/" + SocketOperate.GetSocket().GetLocalEndPoint() + "/" + Txt;

                //发送消息

                SocketOperate.GetSocket().SendMessage(Txt);

            }

            catch

            {

                RegistFrom.GetRegistfrom().ShowMessage("服务器未响应");

                RegistFrom.GetRegistfrom().ButtonOF(true);

            }

        }

    }

}

SendMassageCommand.cs

namespace Client.SendCommand

{

    class SendMassageCommand : AbstractCommand

    {

        //转发命令数据报为:forwardRequest/目标端口/文本

        public override void Operate(string Txt)

        {

            SocketOperate socket = new SocketOperate();

            Txt = "forwardRequest/" + Txt;

            socket.SendMessage(Txt);

        }

    }

}

表8 消息发送程序表

4.2.3 聊天气泡生成

文件名

内容

Chatbox.cs

public void addChatBubble(BubbleSide bubbleSide,string msg,string sender,string senderID,string profileImgPath)//生成文字气泡

        {

            IChatBubble bubble = null;

            if(bubbleSide == BubbleSide.LEFT)

            {

                bubble = new LeftChatBubble();

                (bubble as LeftChatBubble).profileRightClicked += ChatBox_profileRightClicked;

            }

            else if(bubbleSide == BubbleSide.RIGHT)

            {

                bubble = new RightChatBubble();

                (bubble as RightChatBubble).profileRightClicked += ChatBox_profileRightClicked;

            }

            if (chatPanel.Controls.Count != 0)

                (bubble as Control).Top = chatPanel.Controls[chatPanel.Controls.Count - 1].Top + chatPanel.Controls[chatPanel.Controls.Count - 1].Height;

            chatPanel.Controls.Add(bubble as Control);

            bubble.setText(msg, sender,senderID,profileImgPath);

            chatPanel.ScrollControlIntoView(bubble as Control);

        }

public void addImgBubble(BubbleSide bubbleSide,string imgPath, string sender, string senderID, string profileImgPath)//生成图片气泡

        {

            IImgBubble imgBubble = null;

            if (bubbleSide == BubbleSide.LEFT)

            {

                imgBubble = new LeftImgBubble();

                (imgBubble as LeftImgBubble).profileRightClicked += ChatBox_profileRightClicked;

            }

            else if (bubbleSide == BubbleSide.RIGHT)

            {

                imgBubble = new RightImgBubble();

                (imgBubble as RightImgBubble).profileRightClicked += ChatBox_profileRightClicked;

            }

            if (chatPanel.Controls.Count != 0)

                (imgBubble as Control).Top = chatPanel.Controls[chatPanel.Controls.Count - 1].Top + chatPanel.Controls[chatPanel.Controls.Count - 1].Height;

            chatPanel.Controls.Add(imgBubble as Control);

            imgBubble.setImg(imgPath, sender, senderID, profileImgPath);

            chatPanel.ScrollControlIntoView(imgBubble as Control);

        }

        public void addVoiceBubble(BubbleSide bubbleSide, string recordPath, string sender, string senderID, string profileImgPath)//生成声音气泡

        {

            IVoiceBubble voiceBubble = null;

            if (bubbleSide == BubbleSide.LEFT)

            {

                voiceBubble = new LeftVoiceBubble();

                (voiceBubble as LeftVoiceBubble).profileRightClicked += ChatBox_profileRightClicked;

            }

            else if (bubbleSide == BubbleSide.RIGHT)

            {

                voiceBubble = new RightVoiceBubble();

                (voiceBubble as RightVoiceBubble).profileRightClicked += ChatBox_profileRightClicked;

            }

            if (chatPanel.Controls.Count != 0)

                (voiceBubble as Control).Top = chatPanel.Controls[chatPanel.Controls.Count - 1].Top + chatPanel.Controls[chatPanel.Controls.Count - 1].Height;

            chatPanel.Controls.Add(voiceBubble as Control);

            voiceBubble.setRecord(recordPath, sender, senderID, profileImgPath);

            chatPanel.ScrollControlIntoView(voiceBubble as Control);

        }

表8 聊天气泡生成程序表

5.2测试实现

用例标识

项目名称

局域网聊天系统

开发人员

黄俊添 刘彤 陈晓楠 岳家乐

模块名称

聊天模块

用例作者

参考信息

              

测试类型

设计日期

2021/10-2021/12

测试人员

刘彤

测试方法

 黑盒

测试日期

2021/12/24

用例描述

前置条件

用户和客户端在同一局域网下

编号

权限(并列关系)

测试项

测试类别

描述/输入/操作

期望结果

真实结果

备注

00001

登录界面

账号输入框

功能测试

输入账号

可输入数字

00002

密码输入框

输入密码

输入数字后数字显示为星号

00003

登录按钮

登录按钮是否可用

可用

是否可以进入好友列表

可以进入好友列表

00004

好友列表

用户名称显示 

功能测试

显示登录用户的名称

正常显示登录用户的名称

00005

好友列表显示

显示用户数据库中的好友列表

正常显示用户数据库中的好友列表

00006

好友名称显示

显示好友的名称

正常显示好友的名称

双击好友名称

进入好友聊天框

00007

聊天界面

好友名称显示

功能测试

显示好友的名称

正常显示好友的名称

00008

聊天输入框

输入聊天信息

可输入聊天信息

00009

聊天信息框

显示接收到的聊天信息

可正常显示接收到的聊天信息

00010

发送按钮

发送按钮是否可用

可用

发送聊天输入框中聊天信息

成功发送

表9 聊天模块测试表

用例标识

项目名称

局域网聊天系统

开发人员

黄俊添 刘彤 陈晓楠 岳家乐

模块名称

服务器模块

用例作者

参考信息

              

测试类型

设计日期

2021/10-2021/12

测试人员

刘彤

测试方法

 黑盒

测试日期

2021/12/24

用例描述

前置条件

用户和客户端在同一局域网下

编号

权限(并列关系)

测试项

测试类别

描述/输入/操作

期望结果

真实结果

备注

00001

服务器调试界面

服务器IP地址输入框

功能测试

输入IP地址

可输入数字

设置服务器IP

成功设置服务器IP

00002

服务器端口地址输入框

输入端口地址

可输入数字

设置服务器启动端口

成功设置服务器启动端口

00003

在线用户监测窗口

监测成功登录的用户和IP地址

显示登录用户和用户登录的IP地址

00004

用户登录日志窗口

监测用户上下线的行为

根据用户行为进行记录

00005

客户端操作日志窗口

监测客户端进行的变动

根据客户端变化进行记录

00006

文字发送框

输入文字

输入文字

表10 服务器模块测试表

用例标识

项目名称

局域网聊天系统

开发人员

黄俊添 刘彤 陈晓楠 岳家乐

模块名称

聊天气泡模块

用例作者

参考信息

              

测试类型

设计日期

2021/10-2021/12

测试人员

刘彤

测试方法

黑盒

测试日期

2021/12/24

用例描述

未整合到主程序中

前置条件

用户和客户端在同一局域网下

编号

权限(并列关系)

测试项

测试类别

描述/输入/操作

期望结果

真实结果

备注

00001

聊天界面

文字气泡

功能测试

输出文字后以文字气泡形式显示

正常显示

00002

图片气泡

输出图片后以文字气泡形式显示

正常显示

00003

语音气泡

能否正常发送语音气泡

可用

表11 聊天气泡模块测试表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值