基于C++的即时通信软件设计

目录
— 、 概 述 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

/
// CMySocket

CMySocket::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("当前用户:%srn%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:%srn",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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>