目录
— 、 概 述 1
1 . 1 设 计 目 的 : 1
1 . 2 设 计 内 容 : 1
1 . 2 . 1 功 能 设 计 : 1
1 . 2 . 2 界 面 设 计 : 1
1 . 2 . 3 客 户 端 、 服 务 器 设 计 : 1
1 . 3 设 计 要 求 : 1
二 、 设 计 任 务 分 析 1
2 . 1 功 能 设 计 分 析 : 1
2 . 2 界 面 设 计 : 1
2. 3 客 户 端 、 服 务 器 设 计 : 1
2 . 3 . 1 客 户 端 设 计 : 1
2 . 3 . 2 服 务 器 端 设 计 : 1
三 、 总 体 设 计 2
3. 1 界 面 设 计 结 果 2
3 . 1 . 1 登 陆 、 注 册 对 话 框 2
3 . 1 . 2 主 界 面 对 话 框 2
3 . 2 客 户 端 程 序 处 理 流 程 图 : 3
3. 3 服 务 器 端 程 序 处 理 流 程 图 4
四 、 程 序 实 现 5
4. 1 消 息 结 构 体 : 5
4 . 1 . 1 消 息 结 构 体 5
4 . 1 . 2 消 息 模 板 : 5
4 . 1 . 3 解 释 : 5
4 . 2 客 户 端 程 序 实 现 : 5
4 . 2 . 1 客 户 端 自 定 义 套 接 字 类 ( 继 承 M F C 抽 象 类 C S O C K E T ) 实 现 : 5
4 . 2 . 2 登 陆 、 注 册 对 话 框 实 现 : 6
4 . 2 . 3 主 对 话 框 实 现 : 7
4 . 3 服 务 器 程 序 实 现 : 10
五 、 运 行 结 果 : 15
5 . 1 登 陆 、 注 册 : 15
5 . 2 消 息 发 送 : 17
5 . 2 . 1 单 发 消 息 : 17
5 . 2 . 2 群 发 消 息 : 18
5 . 3 文 件 发 送 : 19
六 、 心 得 与 体 会 20
6 . 1 遇 到 的 问 题 及 解 决 方 案 20
6 . 1 . 1 服 务 器 如 何 与 多 个 客 户 端 进 行 交 互 ? 20
6 . 1 . 2 : 如 何 实 现 客 户 端 消 息 的 非 阻 塞 式 接 收 ? 20
6 . 2 心 得 与 体 会 : 21
参 考 文 献 : 21
— 、概述
1… 1 设 计 目 的 :
设计一个基于 LAN 的即时通信软件,实现在局域网下可靠的、稳定的即时通信功能以及其从属的附加功能。 1 . 2 设 计 内 容 :
1… 2 . 1 功 能 设 计 :
·实现一对一的单播通信,包括消息发送与接收以及文件的发送与接收;
·实现一对多的多播通信,包括消息的发送与接收;
·附加功能:实现登陆、注册、获取当前在线情况等功能;
1 . 2 . 2 界 面 设 计 :
·客户端的交互界面设计。
1 . 2 . 3 客 户 端 、 服 务 器 设 计 :
·客户端需要完成的功能;
·服务器需要完成的功能;
·客户端、服务器的交互设计;
1… 3 设 计 要 求 :
结合《计算机网络》课程所学的知识以及查阅相应的资料完成相应的设计内容, 且需要保证设计的质量以及程序的可靠性和稳定性。
二、设计任务分析
2… 1 功 能 设 计 分 析 :
·实现一对一的单播、多播通信:
主要运用消息转发技术,需要服务器来处理消息的解析和转发;其中消息的解析包括获取消息的发送者、接收者、类别;本文转载自http://www.biyezuopin.vip/onews.asp?id=15303针对不同的解析结果需要做出不同的响应。
·实现附加功能:
实现登陆、注册、获取当前在线情况等功能;将客户端对附加功能的调用当作特殊的请求消息发送给服务器,服务器解析后做出不同的响应。 2 . 2 界 面 设 计 :
客户端界面需要有较好的交互性,因此需要设计:
·登陆、注册对话框:包括用户名输入框、登陆和注册按钮;
·主界面对话框:包括消息发送编辑框、消息接收显示区、好友在线情况显示区、发送按钮、以及登陆按钮; 2 . 3 客 户 端 、 服 务 器 设 计 :
2 . 3 . 1 客 户 端 设 计 :
·获取客户所发送的消息内容;
·根据客户要求封装消息并发送消息;
·接收服务器发来的消息;
·解析接收的消息并执行对应响应的功能;
2… 3 . 2 服 务 器 端 设 计 :
·获取客户端发来的消息
·解析消息并执行对应的处理
·将处理结果封装成消息发送给指定客户
// MySocket.cpp : implementation file
//#include "stdafx.h"
#include "LanMessage.h"
#include "MySocket.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/
// CMySocketCMySocket::CMySocket()
{
}CMySocket::~CMySocket()
{
}
void CMySocket::OnReceive(int n)//消息响应处理
{
if(dlg->online)//在线才进行响应
{
mes trans;
if(!Receive((void*)&trans,sizeof(trans))){return;
}//获取服务器消息
CString txt1=trans.from,txt2="在线用户";
if(txt1==txt2)//如果是"在线客户"消息
{
CString show;
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]=='_')//如果是文件消息
{
CStdioFile put;
CString name=trans.from;
name=name.Mid(1);
//获取文件名
if(!put.Open(name,CFile::modeCreate|CFile::modeWrite))//将文件内容存储
{ AfxMessageBox("创建文件失败!");
return;
}
else put.WriteString(trans.content);
put.Close();
}
else {//如果是普通消息
CString show;
show.Format("From %s:%s\r\n",trans.from,trans.content);
dlg->m_show+=show;
dlg->UpdateData(false);
//刷新主界面
}
}
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CMySocket, CSocket)
//{{AFX_MSG_MAP(CMySocket)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0/
// CMySocket member functions
【c++|基于C++的即时通信软件设计】
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
推荐阅读
- 网络|node-red、nodejs与JavaScript之间的区别与联系
- 每日一练|每日一练--(陶陶摘苹果)(n边形划分)
- Algorithm|【algorithm】算法学习----堆
- 一本通oj|一本通OJ 1376
- 面试题|c++面试题总结
- C++|C++s简单实现Scoket编程
- C++|C++初阶(内存管理)
- 以分号结尾的诗(C++|C++之内存管理:申请与释放)
- C++|猿创征文|C++——类和对象4| 构造函数体赋值|初始化列表explicit关键字|匿名对象|static成员|静态成员变量|静态成员函数| static相关习题|友元