# 一、概述
## 1.1 设 计 目 的 :
设计一个基于 LAN 的即时通信软件,实现在局域网下可靠的、稳定的即时通信功能以及其从属的附加功能。
## 1.2 设 计 内 容 :
### 1.2.1 功 能 设 计 :
- ·实现一对一的单播通信,包括消息发送与接收以及文件的发送与接收;
- ·实现一对多的多播通信,包括消息的发送与接收;
- ·附加功能:实现登陆、注册、获取当前在线情况等功能;
### 1.2.2 界 面 设 计 :
·客户端的交互界面设计。
### 1.2.3 客 户 端 、 服 务 器 设 计 :
- ·客户端需要完成的功能;
- ·服务器需要完成的功能;
- ·客户端、服务器的交互设计;
## 1.3 设 计 要 求 :
结合《计算机网络》课程所学的知识以及查阅相应的资料完成相应的设计内容, 且需要保证设计的质量以及程序的可靠性和稳定性。
# 二、设计任务分析
## 2.1 功 能 设 计 分 析 :
·实现一对一的单播、多播通信:
主要运用消息转发技术,需要服务器来处理消息的解析和转发;其中消息的解析包括获取消息的发送者、接收者、类别;针对不同的解析结果需要做出不同的响应。
·实现附加功能:
实现登陆、注册、获取当前在线情况等功能;将客户端对附加功能的调用当作特殊的请求消息发送给服务器,服务器解析后做出不同的响应。
## 2.2 界 面 设 计 :
客户端界面需要有较好的交互性,因此需要设计:
·登陆、注册对话框:包括用户名输入框、登陆和注册按钮;
·主界面对话框:包括消息发送编辑框、消息接收显示区、好友在线情况显示区、发送按钮、以及登陆按钮;
## 2.3 客 户 端 、 服 务 器 设 计 :
### 2.3.1 客 户 端 设 计 :
- ·获取客户所发送的消息内容;
- ·根据客户要求封装消息并发送消息;
- ·接收服务器发来的消息;
- ·解析接收的消息并执行对应响应的功能;
### 2.3.2 服 务 器 端 设 计:
- ·获取客户端发来的消息
- ·解析消息并执行对应的处理
- ·将处理结果封装成消息发送给指定客户
# 三、总体设计
## 3.1 界 面 设 计 结 果
### 3.1.1 登 陆 、 注 册 对 话 框
![](https://www.writebug.com/myres/static/uploads/2021/11/22/8dfd9b00683643b19b4dc8fb26e1daa7.writebug)
### 3.1.2 主 界 面 对 话 框
![](https://www.writebug.com/myres/static/uploads/2021/11/22/6a7f4bc3241a7547a159a33afc02a347.writebug)
说明:
- 编辑框 1:消息接收窗口编辑框 2:消息发送编辑框
- 编辑框 3:消息接收者编辑框编辑框 4:当前在线用户显示框
- “发送”按钮:发送编辑框 2 中的内容给编辑框 3 内对应的客户;
- “文件”按钮:发送编辑框 2 中对应的文件给编辑框 3 内对应的客户;
- “登陆”按钮:打开登陆、注册对话框;
## 3.2 客 户 端 程 序 处 理 流 程 图 :
登 陆 、 注 册 处 理 :
![](https://www.writebug.com/myres/static/uploads/2021/11/22/7a8cc736f24edbc5cc564637d720e30b.writebug)
普 通 消 息 发 送 、 文 件 发 送 、 以 及 消 息 接 受
![](https://www.writebug.com/myres/static/uploads/2021/11/22/4ba4592ab900cd3765003dd2dc907875.writebug)
## 3.3 服 务 器 端 程 序 处 理 流 程 图
![](https://www.writebug.com/myres/static/uploads/2021/11/22/4e0c68aca71f05187b686ebcccae2e52.writebug)
##
# 四、程序实现
## 4.1 消息结构体:
### 4.1.1 消 息 结 构 体
```
struct mes/ / 消 息 结 构 体
{
;
/ / 发 送 者
;
/ / 接 收 者
_ PAT H ] ;
/ / 消 息 内 容
} ;
```
### 4.1.2 消 息 模 板 :
![](https://www.writebug.com/myres/static/uploads/2021/11/22/c61e7e16c6401961bfd77173367b2f30.writebug)
### 4.1.3 解 释 :
客 户 端 和 服 务 器 会 根 据 消 息 的 三 部 分 内 容 进 行 消 息 解 析 , 不 同 的 解 析 结果 对 应 不 同 的 消 息 处 理 。
## 4.2 客户端程序实现:
### 4.2.1 客 户 端 自 定 义 套 接 字 类 ( 继 承 M F C 抽 象 类 C S O C K E T ) 实 现 :
```c++
class CMySocket: public CSocket
{
/ / Attributes
public:
CLanMessageDlg *dlg;/ / 主 对 话 框 指 针
//Operations
public:
CMySocket();
virtual~CMySocket();
voidOnReceive(intn);//消息接收响应
...........
}
void CMySocket::OnReceive(intn)//消息响应处理
{
if(dlg->online)//在线才进行响应
{
mestrans;
if(!Receive((void*)&trans,sizeof(trans)))
{
return;
}//获取服务器消息
CStringtxt1=trans.from,txt2="在线用户";
if(txt1==txt2)//如果是"在线客户"消息
{
CStringshow;show.Format("当前用户:%s\r\n%s:%s",dlg->me,trans.from,trans.content);
dlg->m_online=show;
dlg->UpdateData(false);//刷新主界面
}
else if(trans.from[0]=='_')//如果是文件消息
{
CStdioFileput;
CStringname=trans.from;
name=name.Mid(1);//获取文件名
if(!put.Open(name,CFile::modeCreate|CFile::modeWrite))//将文件内容存储
{
AfxMessageBox("创建文件失败!");
return;
}
else put.WriteString(trans.content);
put.Close();
}
else{//如果是普通消息
CStringshow;
show.Format("From%s:%s\r\n",trans.from,trans.content);
dlg->m_show+=show;
dlg->UpdateData(false);//刷新主界面
}
}
}
```
### 4.2.2 登 陆 、 注 册 对 话 框 实 现 :
```c++
class CLOGINDLG: public CDialog
{
//Construction
public:
CLanMessageDlg*dlg;//主对话框指针
........
}
//按钮响应
void CLOGINDLG::OnButtonlogin()//向服务端申请登陆
{
//TODO:Add your control notification handler code here
UpdateData(true);//刷新获取用户名
mesa;
sprintf(a.from,"%s",m_name);
sprintf(a.content,"登陆");//消息封装//消息发送
if(!dlg->client->Send((void*)&a,sizeof(a)))
{
MessageBox("错误发送");
return;
}
dlg->me=m_name;
mestrans;//获取登陆结果
if(!dlg->client->Receive((void*)&trans,sizeof(trans)))
{
return;
}
CStringtxt1="您已登陆成功!",txt2=trans.content;
if(txt1==txt2)//如果登陆成功
{
dlg->online=true;
GetDlgItem(IDC_BUTTONLOGIN)->EnableWindow(false);//禁用登陆和注册按钮
GetDlgItem(IDC_BUTTONREGIST)->EnableWindow(false);
}
else
{
MessageBox(trans.content);//打印登陆失败原因
}
}
void CLOGINDLG::OnButtonregist()//向服务端申请注册
{
//TODO:Add your control notification handler code here
UpdateData(true);//获取注册用户名
mesa;
sprintf(a.from,"%s",m_name);
sprintf(a.content,"注册");//封装注册消息
//发送消息
if(!dlg->client->Send((void*)&a,sizeof(a)))
{
MessageBox("错误发送");
return;
}
mestrans;//接收注册结果
if(!dlg->client->Receive((void*)&trans,sizeof(trans)))
{
return;
}
CStringtxt1="注册成功!",txt2=trans.content;
if(txt1==txt2)//如果注册成功
{
MessageBox(trans.content);
}
}
```
### 4.2.3 主 对 话 框 实 现 :
```c++
# definePORT3000//服务器端口及ip地址
# define IP "127.0.0.1"
class CLanMessageDlg: public CDialog
{
//Construction
public:
CStringme;//客户名字
CLanMessageDlg(CWnd*pParent=NULL);//standard constructor
boolonline;//是否在线
CSocket*client;//套接字指针
//DialogData
//{{AFX_DATA(CLanMessageDlg)
enum{IDD=IDD_LANMESSAGE_DIALOG};
CStringm_online;//在线情况
CStringm_to;//消息接收者
CStringm_message;/
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目功能是设计一个基于LAN的即时通信软件,实现在局域网下可靠的、稳定的即时通信功能以及其从属的附加功能。本项目要求结合《计算机网络》课程所学的知识以及查阅相应的资料完成相应的设计内容,且需要保证设计的质量以及程序的可靠性和稳定性。 功 能 设 计 : ·实现一对一的单播通信,包括消息发送与接收以及文件的发送与接收; ·实现一对多的多播通信,包括消息的发送与接收; ·附加功能:实现登陆、注册、获取当前在线情况等功能;
资源推荐
资源详情
资源评论
收起资源包目录
基于C++ LAN的即时通信软件【100011440】 (139个子文件)
Subject1.aps 35KB
LanMessage.aps 21KB
FTP.APS 21KB
LanMessage.clw 2KB
FTP.clw 2KB
Subject1.clw 1KB
FTPDlg.cpp 9KB
LanMessageDlg.cpp 6KB
Subject1Dlg.cpp 6KB
Service.cpp 6KB
server.cpp 3KB
LOGINDLG.cpp 2KB
Subject1.cpp 2KB
LanMessage.cpp 2KB
FTP.cpp 2KB
MySocket.cpp 1KB
MySocket.cpp 921B
StdAfx.cpp 204B
StdAfx.cpp 202B
StdAfx.cpp 197B
LanMessage.dsp 4KB
服务器.dsp 4KB
FTP.dsp 4KB
Subject1.dsp 4KB
Service.dsp 3KB
LanMessage.dsw 497B
Subject1.dsw 493B
Service.dsw 493B
服务器.dsw 491B
FTP.dsw 483B
Service.exe 568KB
服务器.exe 520KB
LanMessage.exe 112KB
FTP.exe 112KB
Subject1.exe 108KB
LanMessageDlg.h 2KB
FTPDlg.h 2KB
LOGINDLG.h 1KB
Subject1Dlg.h 1KB
LanMessage.h 1KB
Subject1.h 1KB
FTP.h 1KB
MySocket.h 1KB
resource.h 1KB
resource.h 1KB
MySocket.h 1KB
StdAfx.h 1KB
StdAfx.h 1KB
StdAfx.h 1KB
resource.h 979B
FTP.ico 1KB
Subject1.ico 1KB
LanMessage.ico 1KB
vc60.idb 233KB
vc60.idb 225KB
vc60.idb 209KB
vc60.idb 209KB
vc60.idb 193KB
Service.ilk 823KB
服务器.ilk 770KB
FTP.ilk 343KB
LanMessage.ilk 278KB
Subject1.ilk 243KB
LICENSE 1KB
README.md 21KB
READMEbefore.md 1KB
FTP.ncb 81KB
LanMessage.ncb 81KB
Subject1.ncb 49KB
Service.ncb 49KB
服务器.ncb 41KB
Service.obj 347KB
server.obj 162KB
StdAfx.obj 104KB
StdAfx.obj 104KB
StdAfx.obj 103KB
FTPDlg.obj 52KB
LanMessageDlg.obj 38KB
Subject1Dlg.obj 32KB
LOGINDLG.obj 18KB
LanMessage.obj 15KB
Subject1.obj 14KB
FTP.obj 14KB
MySocket.obj 11KB
MySocket.obj 6KB
FTP.opt 50KB
LanMessage.opt 50KB
Subject1.opt 48KB
服务器.opt 48KB
Service.opt 48KB
Service.pch 5.56MB
FTP.pch 5.32MB
Subject1.pch 5.31MB
LanMessage.pch 5.24MB
服务器.pch 5.17MB
Service.pdb 1.11MB
服务器.pdb 1.05MB
LanMessage.pdb 441KB
FTP.pdb 425KB
Subject1.pdb 393KB
共 139 条
- 1
- 2
资源评论
- 时间煮雨!2024-04-28资源很赞,希望多一些这类资源。
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HM2305B-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于52单片机、ADC0832、LCD1602、两个74HC393和一个74HC08的频率测量计 不能用,请私我
- HM2302-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- python实战项目-学生成绩管理系统(基础版)
- 微信小程序源码 实现查公交 滴滴公交 app 源码下载
- HM2302E-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于C#图片相似度比较,感知哈希算法
- VR开发的概要介绍与分析
- 自动驾驶定位系列教程七:点云畸变补偿.pdf
- HM2302D-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功